测试前准备:

  1. 使用 springboot web 构建项目,并在service中加上 @Async (要使用@EnableAsync开启异步处理) 和@Validated 这里这个service 初始化时就必须要经过这两个对应的beanPostProcessor 
  2. 在abstractAdvisingBeanPostProcessor中的  postProcessAfterInitalization中加上断点,并配置断点的condition 为 beanName.contains("testServiceImpl") 其中testServiceImpl为我们加上@Async和@Validated的service 名称
  3. 启动项目跟着流程走即可。

重点类讲解:

  1. 生成service的代理类时会指定一个接口列表,我们通常只指定一个。注意:在这里我们的service 至少设置了一个即为 接口 Advised

 

 

  1. 判断当前对象是否生成代理类,如果已生成代理类(肯定已经代理了Advised 接口),就会把当前类的切面类增加到代理类的切面列表里面。
  2. 如果没有,则生成代理类。