43、扩展原理-@EventListener与SmartInitializingSingleton
- 还可以使用 @EventListener; 来监听事件
- 原理:使用EventListenerMethodProcessor处理器来解析方法上的@EventListener;
使用
@Service
public class UserService {
@EventListener(classes = ApplicationEvent.class)
public void listen(ApplicationEvent applicationEvent) {
System.out.println("UserService 监听到的事件.. " + applicationEvent);
}
}
SmartInitializingSingleton 原理
- 会调用 ->afterSingletonsInstantiated();
1)、ioc容器创建对象并refresh();
2)、finishBeanFactoryInitialization(beanFactory);初始化剩下的单实例bean;
- 先创建所有的单实例bean;getBean();
- 获取所有创建好的单实例bean,判断是否是SmartInitializingSingleton类型的;
- 如果是就调用afterSingletonsInstantiated();