什么是AOP?
AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充。AOP思想随之产生。AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。
AOP的JDK动态代理:主要是解决实现了接口的类
个人觉得分为三块:
切面Myspect()类,JDK动态代理类jdkproxy(),对象(通俗来讲对象委托代理去做事情);
JDK动态代理类jdkproxy():注意需要实现JDK中的InvocationHandler接口
并且创建代理方法:
然后将切面写入jdkproxy代理类中:
那么在主要业务中调用代理如何调用如下图:
CGLIB代理:实现没有接口的类做代理
首先代理类实现接口如下:
为对象创建代理的方法如下:
捕获代理对象的要做的事情:
在主函数为对象创建代理和JDK动态代理一样
ProxyFactoryBean:
ProxyFactoryBean是FactoryBean接口的实现类,FactoryBean负责实例化一个Bean,而ProxyFactoryBean负责为其他Bean创建代理实例。在Spring中,使用ProxyFactoryBean是创建AOP代理的基本方式。
切面类实现MethodInterceptor接口:
配置文件如下(更加方便对以上两个的使用):
基于XML的声明式AspectJ:
基于XML的声明式AspectJ是指通过XML文件来定义切面、切入点及通知,所有的切面、切入点和通知都必须定义在<aop:config>元素内;