Spring应用程序上下文

时间:2011-09-08 15:17:48

标签: java spring

在J6SE中有没有其他方法可以获得spring(spring 3.0)应用程序上下文而不是实现ApplicationContextAware接口?

抱歉,我必须改进我的问题。我在我的J6SE应用程序中运行应用程序上下文,在某些类中我需要它。

4 个答案:

答案 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的注释替换。这当然意味着对象需要是一个春天豆。