aop是目标 springaop是一个技术手段达到目的 ,Aspectj 也是一个技术手段
springaop两种方式都采用了, 两种编程风格
ioc是一个编程目标 di是一个手段实现
ioc容器是一个线程安全的map
aop的织入是初始化的时候完成的
springaop 默认用的是什么技术实现的? 看条件的
当有接口时使用jdk动态代理 没有的时候使用cglib代理
默认是使用jdk代理的 初始化的时候有一个判断 当三个条件有一个为true的时候就为使用cglib(继承)代理 (例如在@EnableAspectJAutiProxy(proxyTargetClass= true 默认是为false))
为什么jdk动态代理基于接口,cglib基于继承?
jdk动态代理基于接口 会生成一个class文件 底层帮你已经继承了Proxy 所以接口的形式是jdk代理 java是单继承的方式 不能多继承 所以jdk动态代理使用接口(多实现)
cglib动态代理基于继承 底层没有帮你继承
execution 和within的区别: execution的类型更加丰富,且能定义到具体的方法, 而within只能到类
args 与包无关 与参数有关
annotaion 作用只能在方法上 类上没用
this 代理对象
target 目标对象
proxy模式里面有两个重要术语
proxy Class 代理对象
target Class 目标对象
CGLIB和JDK区别 JDK是基于接口 CGLIB是基于继承,所以thils可以在cglib作用
mybatis是采用jdk的动态代理
spring日志底层是采用 jcl 规范(抽象的) 具体的实现默认是用log4j