ocgn

导航

Spring AOP的动态代理原理和XML与注解配置

AOP 实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。

相关术语:

  • Target(目标对象):代理的目标对象

  • Proxy (代理):一个类被 AOP 织入增强后,就产生一个结果代理类

  • Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点

  • Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义

  • Advice(通知/ 增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知

  • Aspect(切面):是切入点和通知(引介)的结合

  • Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织

 

XML配置:

(1)首先导入坐标

aspectjweaver和spring-context

(2)在创建好目标接口和目标类(内部有切点)和切面类(包含增强方法)后配置XML,将目标类和切面类的创建权交给Spring

<!--配置目标类-->
<bean id="target" class="com.ocgn.aop.Target"></bean>
<!--配置切面类-->
<bean id="myAspect" class="com.ocgn.aop.MyAspect"></bean>

(3)配置切点表达式和前置增强的织入关系

<aop:config>
<!-- 声明切面 -->
<aop:aspect ref="myAspect">
<!-- 抽取切点表达式 -->
<aop:pointcut id="myPointcut" expression="execution(* com.ocgn.aop.*.*(..))"/>
<!-- 切面:切点+通知 配置增强的方法 -->
<aop:around method="around" pointcut-ref="myPointcut"/>
<aop:after method="after" pointcut-ref="myPointcut"/>
</aop:aspect>
</aop:config>

(3.1)其中切点表达式
execution([修饰符] 返回值类型 包名.类名.方法名(参数))


注解配置:
(1)在切面类中定义切点表达式和增强方法:
@Pointcut("execution(* com.ocgn.anno.*.*(..))")
@After("MyAspect.pointcut()")
@Around("pointcut()")

(2)通过@Component("target")将权力交给SPring
并且通过@Aspect标注切面类。

(3)在配置文件中配置组件扫描

<!--组件扫描-->
<context:component-scan base-package="com.ocgn.aop"/>

<!--aop的自动代理-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

posted on 2020-08-03 19:46  ocgn  阅读(249)  评论(0编辑  收藏  举报