动态代理:代理模式的解释:为其他对象提供一种代理以控制对这个对象的访问,增强一个类中的某个方法,对程序进行扩展。
切面(aspectj),切面包含切点(pointCut)和增强方法(advice),对连接点(joinPoint,类的方法就是连接点),然后织入(Weaving),原始对象为代理对象(target)
AOP实现地方 1、@Lazy,2.事务,3.日志
本质上是实现了 BeanPostProcess - afterXXX(初始化之后的方法中对对象进行aop返回代理对象)
增强方法(advice)分五种情况 1.before(方法执行之前)2.around(方法执行之前,方法执行之后),3.afterReturning(方法返回之后执行),4.afterThrowing(方法异常之后),5.after(方法执行之后)
偷的流程图,不太好理解,下面是我自己的解释
1.BeanPostProcess - afterXXX 中判断是否需要实现aop(通过切面判断),如果需要实现,则创建 ProxyFactory
2.ProxyFactory 选择cglib或jdk动态代理原理,如果实现了接口,则使用jdk动态代理(对接口进行代理,会更加节约性能),没有实现接口,则使用cglib
3.太复杂了,这里就产生代理对象直接返回