spring ApplicationListener接口(续)

it2022-05-05  118

之前一篇写了ApplicationListener在spring中的实现

这次写的demo试一下这个接口

先上代码

@Service public class BeanPostprocessorTest implements BeanPostProcessor, ApplicationListener{ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("++++++++++++++++++++++postProcessAfterInitialization ++++++++++++++++++++++++++"); System.out.println(beanName); return bean; } public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub return bean; } public void onApplicationEvent(ApplicationEvent event) { System.out.println("++++++++++++++++++++++ApplicationEvent ++++++++++++++++++++++++++"); System.out.println(event.getClass().getName()); } }

这个类特别简单,但是同时实现了两个接口

BeanPostProcessor, ApplicationListener

可以只看ApplicationListener的onApplicationEvent

里面可以取到event的实现类

启动spring容器之后可以看到控制台输出了

++++++++++++++++++++++ApplicationEvent ++++++++++++++++++++++++++org.springframework.context.event.ContextRefreshedEvent++++++++++++++++++++++ApplicationEvent ++++++++++++++++++++++++++org.springframework.context.event.ContextStartedEvent

 

也就是说在context refresh 和 start的时候都会执行这个方法

再看一个更实际的例子

dubbo的ServiceBean类同样实现了ApplicationListener这个接口

具体代码如下

public void onApplicationEvent(ApplicationEvent event) { if (ContextRefreshedEvent.class.getName().equals(event.getClass().getName())) { if (isDelay() && ! isExported() && ! isUnexported()) { if (logger.isInfoEnabled()) { logger.info("The service ready on spring started. service: " + getInterface()); } export(); } } }

大概意思是当ContextRefreshed时,执行export方法

下一篇说一下BeanPostProcessor这个接口

转载于:https://www.cnblogs.com/liguangming/p/10149096.html


最新回复(0)