IOC和AOP
IOC:
控制反转,将对象的创建以及依赖关系的管理交给容器进行管理,按需求自动创建对象。
spring通过依赖注入(DI)来实现IOC
AOP:
核心概念:
- 切面(Aspect):一般是类,用来定义Pointcut(切入点)和Advice(通知)
- 连接点(JoinPoint):程序执行的某一个点,例如某个方法
- 切入点(pointcut):用来指定需要将Advice(通知)使用到哪些地方,也可视为连接点的集合
- 通知(Advice):需要增强的功能
- 织入(weave):把切面应用到目标对象并创建代理对象的过程
- 目标对象(target):需要被代理增强的类
实现原理:
- 通过JDK动态代理实现,代理模式是指给某一个对象提供一个代理,由代理对象控制对原对象的引用。代理对象提供与真实对象相同的接口,并拦截所有方法调用,判断是否需要进行增强
动态代理:
JDK动态代理:
基于接口实现,代理类和目标类需要实现同一个接口,并重写InvokationHandler类的invoke方法来实现增强逻辑。最后通过Proxy类传入目标接口和反射处理器,调用newInstance方法生成代理对象,拦截方法调用进行增强
Cglib动态代理:
基于继承实现,需要实现MethodInvokeHandler接口,重写对应的invoke方法来实现增强逻辑,
然后使用Enhancer类指定目标类为父类并指定对应的MethodInvokeHandler处理器,调用create方法生成代理对象,拦截方法调用进行增强