先分析这个
BeanPostProcessor
接口,是为了分析spring aop 原理做基础知识。
- MyBeanPostProcessor
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
private UserService userService;
@Autowired
public void setRoleService(UserService userService) {
System.out.println("setter 装配.....");
this.userService = userService;
}
public MyBeanPostProcessor () {
System.out.println("构造器。。。");
}
/**
* spring 在创建完成 依赖注入后调用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization。。。"+ beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization。。。"+ beanName);
return bean;
}
}
运行结果
我们看到在完成对象创建已经依赖注入后会先调用postProcessBeforeInitialization
,然后调用 postProcessAfterInitialization
。同时,看到这个两个方法被调用了很多此,也就是所有的bean的创建装配完成后都会调用这个两个方法
。在spring 中这个运用了模板方法
。接下来我们去spring 的源码中探索原因。