在J6SE中有没有其他方法可以获得spring(spring 3.0)应用程序上下文而不是实现ApplicationContextAware
接口?
抱歉,我必须改进我的问题。我在我的J6SE应用程序中运行应用程序上下文,在某些类中我需要它。
答案 0 :(得分:2)
在阅读完问题之后,我知道您正在寻找ApplicationContextAware的替代方案,但我读到它使用ApplicationContext有许多类的目标,但是希望避免为所有这些类实现接口。此方法仍然使用ApplicationContextAware,但将其封装到单个类中以便重用。
我通常在应用程序启动时通过web.xml中的ContextLoaderListener加载配置。发生这种情况后,我将“MyApplicationContext”设置为contextApplicationContextProvider。
<bean id="contextApplicationContextProvider" class="pkg.MyApplicationContext"></bean>
该类必须按照您的建议实现ApplicationContextAware:
public class MyApplicationContext implements ApplicationContextAware {
private static ApplicationContext appContext;
/* (non-Javadoc)
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
@Override
public void setApplicationContext(ApplicationContext globalAppContext)
throws BeansException {
this.appContext = globalAppContext;
}
public static ApplicationContext getApplicationContext() {
return appContext;
}
}
这里的关键是你现在有一个对ApplicationContext对象的单个实例的静态引用。通过对任何类进行静态方法调用MyApplicationContext.getApplicationContext()来检索它很简单,不管是否为spring。
答案 1 :(得分:0)
您可以从CLASSPATH加载它。
答案 2 :(得分:0)
new FileSystemXmlApplicationContext(APPLICATION_CONTEXT_FILE);
答案 3 :(得分:0)
@Inject
private ApplicationContext ctx;
(或@Autowired
代替@Inject
)。这是ApplicationContextAware
的注释替换。这当然意味着对象需要是一个春天豆。