spring ApplicationListener接口(续)

之前一篇写了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这个接口

posted on 2018-12-20 14:23  liguangming  阅读(195)  评论(0编辑  收藏  举报

导航