Spring AOP原理分析

AOP基础概念

目标类(Target)

代理(Proxy)

连接点(Joinpoint)

切点(Pointcut)

通知(Advice):增加的功能

切面(Aspect):切点 + 通知

织入(Weaving):增强目标类的方法

引入(Introduction):增加新方法、属性

Spring AOP使用方式

1、基于代理的AOP

<!-- 切面=通知+切点 -->
<bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
<property name="advice" ref="myAdvice"/>
<property name="pointcut" ref="myPointcut"/>
</bean>

<!-- 定义代理对象 -->
<bean id="aopProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="targetObject"/>
<property name="interceptorNames" value="myAdvisor"/>
</bean> 

2、纯简单Java对象切面

public class MyAdvice implements MethodBeforeAdvice

<bean id ="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
  <property name="advice" ref="myAdvice"></property>
  <property name="pattern" value=".*test"/>
</bean>

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

3@Aspect注解形式的

@Aspect
@Component
public class MyAspect {
    @Before("pointcut()")
    public void advice() {
        System.out.println("before advice");
    }

    @Pointcut("execution(* cn.zj90..*.*(..))")
    public void pointcut() {
    }
}

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

4、注入形式的Aspcet切面

<aop:config>
  <aop:aspect ref="myAspect">
    <aop:before method="advice" pointcut="execution(* cn.zj90..*.*(..))"/>
  </aop:aspect>
</aop:config>

 Spring AOP原理

使用到的类

ProxyFactoryBean

DefaultAopProxyFactory

JdkDynamicAopProxy

ObjenesisCglibAopProxy

 

JdkDynamicAopProxy

实现了InvocationHandler接口,JDK动态代理的使用如下

Proxy.newProxyInstance(ClassLoader loader,
          Class<?>[] interfaces,
          InvocationHandler h)

invoke方法的实现

 

调用流程

时序图

初始化通知器链,然后获取目标对象的代理,如果目标类实现接口则获取JDK动态代理,否则获取Cglib代理

参考

http://blog.csdn.net/udbnny/article/details/5870076

转载于:https://www.cnblogs.com/zj90/p/7669134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值