spring AOP学习笔记三:底层源码
spring底层到底是用Cjlib还是JDK动态代理?
一个类是用Cjlib还是JDK动态代理取决@EnableAspectJAutoProxy注解有没有表明proxyTargetClass = true。注意默认为false。如果为ture那么永远都使用Cjlib,不管有没有接口,如果为false且有接口那么使用JDK动态代理,如果没有接口那么使用Cjlib。
spring底层的IOC容器就是一个currentHashMap,名字叫singletonObjects。里面存放各种初始化的对象,最先初始化的是spring内部的对象。
原生对象最后会通过spring的7种后置处理器判断需要进行的操作,动态代理会选取AnnotationAwareAspectJAutoProxyCreator这个处理器先判断采用JDK还是Cjlib动态代理,然后把对象变成代理对象,然后通过CLASSLOADER加载进JVM,放入singletonObjects返回,然后我们就可以get到。
注意以上都是使用JAVA Configration至于XML怎么配置可以查看Spring官方文档。