惠州网站建设咨询,dede响应式网站模板,公司网站续费帐怎么做,网站建设合作合同AOP就是代理模式的开发简化
1.Spring容器启动
因为AOP是要将通知类作为一个bean对象交给spring进行管理的#xff0c;还有经过通知类被增强的类。
此时还没有创建bean对象
2.读取所有切面配置中的切入点
在下面这段代码中#xff0c;定义了两个切入点#xff0c;但是只…AOP就是代理模式的开发简化
1.Spring容器启动
因为AOP是要将通知类作为一个bean对象交给spring进行管理的还有经过通知类被增强的类。
此时还没有创建bean对象
2.读取所有切面配置中的切入点
在下面这段代码中定义了两个切入点但是只有一个被使用了只会读取被使用的那个。
Component
Aspect
public class MyAdvice {Pointcut(execution(void org.example.dao.BookDao.save()))public void ptx(){}Pointcut(execution(void org.example.dao.BookDao.update()))public void pt(){}Before(pt())public void method(){System.out.println(System.currentTimeMillis());}
}
3.初始化bean判定bean对应类中的方法是否匹配到任意切入点 这里的匹配是指一个即将被创建bean对象的类身上是否有一个方法是需要被增强的比如说下图的这个BookDaoImpl有一个Repository注解所以它会原本被创建一个bean对象交给spring管理。但是现在这个类中的update()方法已经在通知类当中作为了一个切入点 匹配失败的话就创建一个原始对象
匹配成功的话会创建原始对象(目标对象)的代理对象在上面也就是BookDao的代理对象 匹配成功说明有切入点需要进行增强此时会运行代理对象的方法也就是原始方法的增强版本。这里采用的技术是动态代理。代理就可以做到增强。
spring的AOP内部就是使用代理进行实现的。
4.获取bean执行方法 获取bean调用方法并执行完成操作 获取的bean是代理对象时会根据代理对象的运行模式运行原始方法与被增强的内容来完成操作。
5.查看容器中的对象是不是一个代理对象
getclass():获取对象的运行时对象的类
使用下列输出语句 当一个目标对象的方法没有被增强的时候输出如下此时的bean对象就是原始对象。 当一个目标对象的方法被增强以后输出如下此时的bean对象就是原始对象的代理对象