相关概念:
BeanPostProcessor接口是Bean后置处理器。接口实现类有postProcessBeforeInitialization和afterProcessBeforeInitialization两个方法,分别在bean创建前和创建后出发调用(bean创建/初始化的顺序,需要进一步深化看一下)。因此bean创建之前或者之后对对应bean进行一些处理。这两个方法最终的返回值还是bean。可以是本身,也可以是加工过之后的(比如这里的代理之后的bean)
一般来说,spring工程中编写一个实现了BeanPostProcessor接口的实现类,这个类会在Spring容器启动过程中在实例化每个bean的时候都出发一次响应的postProcessBeforeInitialization和afterProcessBeforeInitialization方法(个人觉得这样会造成很大的启动效率降低)。 利用这一特性,有一个思路:利用beanpostProcessor,捕获部分bean的加载,并对这些bean生成动态代理,并将代理类放到spring容器中,后续调用原本这个bean类的方法时,就会直接进代理类的invoke方法,实现对某些类的某些方法(利用自定义注解)的增强等。这里有以下几个点:
1.MyPostProcessor implements BeanPostProcessor实现类需要将自身也放入spring容器托管,直接@Component或者用@Configure注解类都可以,涉及(@Component和@Configure配置方式的区别)
2.动态代理:动态代理类是用下面的形式创建,实现InvocationHandler接口,实现必须的