Spring——AOP工作流程
创始人
2024-06-01 18:45:44

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对象就是原始对象的代理对象

 

 

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...