`

spring-aop基本概念

阅读更多
AOP词汇:

Joinpoint:在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。通俗的说就是加入切点的那个点.ProceedingJoinPoint

Advice:待织入的逻辑
前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。
后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。
异常通知(After throwing advice):在方法抛出异常退出时执行的通知。
最终通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
环绕通知(Around Advice):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。

继承结构:


使用方法:





Advisor:拥有Advice的接口
PointcutAdvisor:拥有切点逻辑Advisor
DefaultPointcutAdvisor:默认拥有匹配所有类和方法的pointcut 和 Advice 的实现
其他:
RegexpMethodPointcutAdvisor:需要加上完整的类名和方法名,例如:com.xw.methodname或com.*.methodname或.*methodname
NameMatchMethodPointcutAdvisor:只需要方法名,不用加类名:*methodname

切入点:
Pointcut:提供类层面(ClassFilter)和方法层面(MethodMatcher)的匹配逻辑

AOP代理:
Cglib2AopProxy:基于cglib实现的代理,核心:Enhancer
JdkDynamicAopProxy:基于jdk动态代理实现,核心接口:InvocationHandler

切面:
Aspect:是一个Pointcut 和 多个Advice的模块化逻辑单元


最后总结:




举例:
1、Spring AOP:自动代理(扫描切面配置)
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>

    ...

    <bean id="greetingAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="pattern" value="aop.demo.GreetingImpl.good.*"/>
        <property name="advice" ref="greetingAroundAdvice"/>
    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
        <property name="optimize" value="true"/>
    </bean>

</beans>

这里无需再配置代理了,因为代理将会由 DefaultAdvisorAutoProxyCreator 自动生成。也就是说,这个类可以扫描所有的切面类,并为其自动生成代理。

2、Spring + AspectJ(基于注解:通过 AspectJ execution 表达式拦截方法)
@Aspect
@Component
public class GreetingAspect {

    @Around("execution(* aop.demo.GreetingImpl.*(..))")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        before();
        Object result = pjp.proceed();
        after();
        return result;
    }

    private void before() {
        System.out.println("Before");
    }

    private void after() {
        System.out.println("After");
    }
}


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

    <context:component-scan base-package="aop.demo"/>

    <aop:aspectj-autoproxy proxy-target-class="true"/>

</beans>

类上面标注的 @Aspect 注解,这表明该类是一个 Aspect(其实就是 Advisor)。该类无需实现任何的接口,只需定义一个方法(方法叫什么名字都无所谓),只需在方法上标注 @Around 注解,在注解中使用了 AspectJ 切点表达式。方法的参数中包括一个 ProceedingJoinPoint 对象,它在 AOP 中称为 Joinpoint(连接点),可以通过该对象获取方法的任何信息,例如:方法名、参数等。

3、Spring + AspectJ(基于配置)
<?xml version="1.0" encoding="UTF-8"?>
<beans ...">

    <bean id="greetingImpl" class="aop.demo.GreetingImpl"/>

    <bean id="greetingAspect" class="aop.demo.GreetingAspect"/>

    <aop:config>
        <aop:aspect ref="greetingAspect">
            <aop:around method="around" pointcut="execution(* aop.demo.GreetingImpl.*(..))"/>
        </aop:aspect>
    </aop:config>

</beans>


使用 <aop:config> 元素来进行 AOP 配置,在其子元素中配置切面,包括增强类型、目标方法、切点等信息。

无论您是不能使用注解,还是不愿意使用注解,Spring AOP 都能为您提供全方位的服务。
  • 大小: 81.1 KB
  • 大小: 198.4 KB
  • 大小: 56.3 KB
分享到:
评论

相关推荐

    spring-aop-jar

    Spring AOP的关键概念包括: - 切面(Aspect):切面是关注点的模块化,比如日志、事务管理等。在Spring AOP中,切面可以通过注解或XML配置来定义。 - 连接点(Join Point):连接点是程序执行过程中的一个特定点,...

    spring-boot aop

    首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处应用切面,通常通过方法签名或注解来指定。通知(Advice)是切面实际...

    Spring-Aop所有jar

    首先,我们需要理解AOP的基本概念。切面(Aspect)是包含关注点的模块化单元,它封装了跨越多个对象的行为或责任。通知(Advice)是切面在特定连接点(Join Point)执行的代码,例如方法调用前、后或异常发生时。...

    spring-aop.jar

    首先,我们需要理解AOP的基本概念。AOP是一种编程范式,旨在将那些分散在代码各处的、与核心业务逻辑无关但又必须执行的操作(如上述的事务管理和日志记录)抽取出来,形成独立的模块,称为“切面”。这样做的好处是...

    aopalliance-1.0、aspectjweaver-1.8.10、spring-aop-4.3.6.RELEASE、spring-aspects-4.3

    Spring AOP允许开发者定义切点(Pointcut)、通知(Advice)、切面(Aspect)等概念,以实现如日志记录、事务管理等横切关注点。与AspectJ不同,Spring AOP默认使用代理模式(如JDK动态代理或CGLIB),但在配置后也...

    spring-aop实例demo

    首先,我们需要理解AOP的基本概念。AOP的核心是切面(Aspect),它包含了通知(Advice)和切点(Pointcut)。通知是在特定的连接点(Join Point)执行的代码,而切点则是定义这些连接点的规则,通常是一个方法调用。...

    Spring-AOP demo

    首先,让我们理解AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”,这些切面封装了特定的职责,例如日志记录或事务管理。在运行时,切面会与主业务逻辑“织入”在一起,以透明地执行其任务。 在Spring...

    Spring-AOP(前置/后置/环绕)通知的例子

    Spring AOP,全称Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,它引入了面向切面编程的概念,使得开发者可以方便地实现横切关注点,如日志、事务管理等,而无需侵入到业务代码中。在这个例子中...

    AOP.rar-Spring-AOP源码Demo

    1. **AOP的基本概念** - **切面(Aspect)**:AOP的核心单元,它封装了横切关注点,包括通知(advice)、切入点(pointcut)和织入(weaving)。 - **通知(Advice)**:在特定连接点上执行的代码,如方法调用前、...

    java开发常用jar包之spring--aop.rar

    Spring AOP主要涉及以下几个关键概念: 1. 切面(Aspect):切面是关注点的模块化,比如日志、事务管理等。在Spring中,切面可以由一个或多个通知(advice)和一个切入点(pointcut)定义。 2. 通知(Advice):这...

    spring-aop

    一、AOP基本概念 AOP是一种编程范式,旨在改善程序结构,通过将横切关注点(如日志、事务管理等)与业务逻辑分离,提高代码的可维护性和可重用性。在Spring中,AOP主要通过两种方式实现:一种是基于XML配置,另一种...

    spring-aop源码

    一、AOP的基本概念 AOP的核心是切面(Aspect),它封装了横切关注点,如日志记录、事务管理等。在Spring AOP中,切面由通知(Advice)、连接点(Join Point)、切点(Pointcut)、引入(Introduction)和织入...

    Spring-AOP需要的外部包

    首先,我们需要了解AOP的基本概念。面向切面编程(Aspect Oriented Programming,AOP)是一种编程范式,旨在将分散在各处的交叉关注点(例如日志、事务管理)模块化,使得代码更加清晰,更易于维护。Spring AOP通过...

    spring-aop.pdf 源码电子书

    在理解该电子书涉及的知识点之前,我们需要先了解Spring AOP的基本概念和组件。 首先,Spring AOP的核心概念包括: 1. 通知(Advice):这是AOP术语中最核心的概念。通知定义了切面应用到目标对象时所要执行的行为...

    spring-aop面向切面系统日志案例

    首先,理解Spring AOP的基本概念至关重要。AOP是一种编程范式,它允许程序员定义“切面”,这些切面可以包含业务逻辑的多个部分,如方法调用前后的代码。在Spring框架中,切面通过定义“通知”(advice)和“切入点...

    spring官方完整jar包-4.1.6版

    Spring以其“控制反转”(IoC)和“面向切面编程”(AOP)的概念,极大地简化了企业级应用的开发。在4.1.6版本中,Spring提供了许多重要的功能和改进。 1. **控制反转(IoC)**:IoC是Spring的核心特性,它将对象的...

    spring----AOP实现

    1. AOP基本概念 - 切面(Aspect):AOP的核心概念,它封装了关注点,如日志、事务管理等。 - 连接点(Join Point):程序执行过程中可以插入切面的特定点,如方法调用、异常抛出等。 - 切入点(Pointcut):定义...

    Spring框架(spring-framework-5.2.6.RELEASE)的jar包

    - `spring-core-5.2.6.RELEASE.jar`:Spring的核心工具集,包括IoC和基本的AOP支持。 - `spring-expression-5.2.6.RELEASE.jar`:Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 - `spring-jdbc-5.2.6....

    spring-aop.rar(资源免积分/C币)

    一、Spring AOP基本概念 1. 切面(Aspect):切面是关注点的模块化,它包含了横切关注点(如事务管理)的代码和元数据。 2. 连接点(Join Point):程序执行中的某个特定点,例如方法调用或异常处理。 3. 切入点...

Global site tag (gtag.js) - Google Analytics