Java--Spring AOP 源码散点记录(最后整理成一篇博客)

Spring AOP 源码记录:

1.AOP 入口ProxyFactoryBean.getObject()方法;

 

2.AOP实现:

(1)实现InvocationHandler接口

(2)通过java.lang.reflect.Proxy.newProxyInstance生成代理类

 

3.JDK与cglib动态代理的区别

(1)JDK动态代理生成的class都是基于反射去调用,所以调用性能低。

(2)cglib动态代理生成的class是继承原有class并且重写父类的方法,所以调用性能高,但是无法代理Final关键字修饰的class和方法。

 

4.使用<aop:aspectj-autoproxy proxy-target-class="true"/>注解源码解析

(1)使用该注解以后,Spring解析注解时会将AnnotationAwareAspectJAutoProxyCreator注入到容器当中,而该类是实现了BeanPostProcessor接口的

(2)AnnotationAwareAspectJAutoProxyCreator会自动查找带@Aspect注解的class

(3)最后在AnnotationAwareAspectJAutoProxyCreator的postProcessAfterInitialization(Object bean, String beanName)方法中生成对象的代理对象并且替换原对象。

posted @ 2016-11-28 11:33  11楼的日记  阅读(216)  评论(0编辑  收藏  举报