您的位置:首页 > 移动开发

通过ApplicationContextAware获取bean

2013-12-13 14:00 465 查看
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,获得ApplicationContext对象。

前提必须在Spring配置文件中指定该类

public class ApplicationContextRegister implements ApplicationContextAware {

private Log log = LogFactory.getLog(getClass());

public void setApplicationContext(ApplicationContext applicationContext)

throws BeansException {

ContextUtils.setApplicationContext(applicationContext);

log.debug("ApplicationContext registed");

}

}

public class ContextUtils {

private static ApplicationContext applicationContext;

private static Log log = LogFactory.getLog(ContextUtils.class);

public static void setApplicationContext(ApplicationContext applicationContext) {

synchronized (ContextUtils.class) {

log.debug("setApplicationContext, notifyAll");

ContextUtils.applicationContext = applicationContext;

ContextUtils.class.notifyAll();

}

}

public static ApplicationContext getApplicationContext() {

synchronized (ContextUtils.class) {

while (applicationContext == null) {

try {

log.debug("getApplicationContext, wait...");

ContextUtils.class.wait(60000);

if (applicationContext == null) {

log.warn("Have been waiting for ApplicationContext to be set for 1 minute", new Exception());

}

} catch (InterruptedException ex) {

log.debug("getApplicationContext, wait interrupted");

}

}

return applicationContext;

}

}

public static Object getBean(String name) {

return getApplicationContext().getBean(name);

}

}

配置文件:<bean class="com.sinotrans.framework.core.support.ApplicationContextRegister" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: