BeanFactoryPostProcessor
执行时机:
beanFactory的后置处理器;
在BeanFactory标准初始化之后调用,来定制和修改BeanFactory的内容;
所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建
BeanFactoryPostProcessor原理:
代码示例: 执行 实际
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("MyBeanFactoryPostProcessor...postProcessBeanFactory...");
int count = beanFactory.getBeanDefinitionCount();
String[] names = beanFactory.getBeanDefinitionNames();
System.out.println("当前BeanFactory中有"+count+" 个Bean");
System.out.println(Arrays.asList(names));
}
}
public class MyTest {
@Test
public void test01 () {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExtConfig.class);
applicationContext.close();
}
}
@ComponentScan("com.fyj.spring.annotation.ext")
@Configuration
public class ExtConfig {
@Bean
public Blue blue(){
return new Blue();
}
}
执行结果:
在 Blue 初始化之前执行
BeanDefinitionRegistryPostProcessor
ApplicationListener
步骤:
原理
事件多播器(派发器)
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
// 当容器发布此事件以后,方法触发
public void onApplicationEvent(ApplicationEvent event) {
System.out.println("收到事件:" + event);
}
}
运行结果: