上篇列举了lenosp开源项目关于Spring的相关应用,感觉意犹未尽,这篇继续列举Dubbo中Spring的生命周期的应用
/**
* ServiceFactoryBean
* 实现了InitializingBean, DisposableBean, ApplicationContextAware, BeanNameAware
* @author william.liangf
* @export
*/
public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener, BeanNameAware {
private static final long serialVersionUID = 213195494150089726L;
private static transient ApplicationContext SPRING_CONTEXT;
private transient ApplicationContext applicationContext;
private transient String beanName;
private transient boolean supportedApplicationListener;
public ServiceBean() {
super();
}
public ServiceBean(Service service) {
super(service);
}
public static ApplicationContext getSpringContext() {
return SPRING_CONTEXT;
}
// 实现ApplicationContextAware接口获取ApplicationContext上下文
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
//SpringExtensionFactory.addApplicationContext(applicationContext);
......
}
// 实现BeanNameAware接口设置beanName
public void setBeanName(String name) {
this.beanName = name;
}
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();
}
}
}
private boolean isDelay() {
Integer delay = getDelay();
ProviderConfig provider = getProvider();
if (delay == null && provider != null) {
delay = provider.getDelay();
}
return supportedApplicationListener && (delay == null || delay.intValue() == -1);
}
// 实现InitializingBean接口执行一些初始化操作
@SuppressWarnings({ "unchecked", "deprecation" })
public void afterPropertiesSet() throws Exception {
......
}
// 实现DisposableBean接口,当容器销毁时执行一些操作
public void destroy() throws Exception {
unexport();
}
}