///////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2012 smilonet.
// All rights reserved
///////////////////////////////////////////////////////////////////////////////////////////////////
package com.smilonet.common.spring;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* 用于持有spring的applicationContext,一个系统只能有一个ApplicationContextHolder <br />
*
* <pre>
* 使用方法:
* <bean class="com.smilonet.common.spring.ApplicationContextHolder"/>
*
* 在java代码中则可以如此使用:
* BlogDao dao = (BlogDao)ApplicationContextHolder.getBean("blogDao");
* @author wanglong(a)smilonet.com email:wanglong(a)smilonet.com(a)smilonet.com
* @version 1.0
* @since 1.0
*/
@Data
@Slf4j
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@SuppressWarnings("all")
public void setApplicationContext(ApplicationContext context) throws BeansException {
if (this.applicationContext != null) {
throw new IllegalStateException("ApplicationContextHolder already holded 'applicationContext'.");
}
this.applicationContext = context;
log.info("holded applicationContext,displayName:" + applicationContext.getDisplayName());
}
public static ApplicationContext getApplicationContext() {
if (applicationContext == null)
throw new IllegalStateException("'applicationContext' property is null,ApplicationContextHolder not yet init.");
return applicationContext;
}
public static Object getBean(String beanName) {
return getApplicationContext().getBean(beanName);
}
public static void cleanHolder() {
applicationContext = null;
}
}