0

[春天的新手]

有一个启用了 Spring 的服务并做了一些事情。当这个服务启动时,它会加载 Spring Application 上下文,每个人都很高兴。

现在,我需要创建一个将由上述服务使用的库,并且我也想对这个库包进行 Springify。但是,这个库的应用程序上下文何时/如何初始化?我难住了!

我想应该很多人都这样做了。最佳做法是什么?

我在想,可能是库的入口点接口中的静态块是初始化应用程序上下文的正确位置吗?(所以,它只被初始化一次)

这是正确的方法吗?它甚至会起作用还是我错过了什么?感谢你的帮助。

4

2 回答 2

1

您可以根据需要提供任意数量的应用程序上下文 xml 文件,如果您在 Web 应用程序中使用该库,

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
    classpath:context1.xml
    classpath:context2.xml
    ...
</param-value>
</context-param>

基本上你需要提供相对路径classpath:<relativepathofcontextfile>
如果它在一个 jar 文件中并且你的 jar 在类路径中,那么上面的那个就可以了。

如果它是独立的,您可以使用ClassPathXmlApplicationContext.

public class SomeClass {
    private static final ApplicationContext ac= 
        new ClassPathXmlApplicationContext("classpath:context1.xml");
    public static void main(String[] args) {
        MyIntf bean= (MyIntf) ac.getBean("myBean");
        bean.myMethod();
    }
}
于 2012-08-27T08:35:11.843 回答
0

不,使用静态块,您正在强制加载 Spring 上下文,而忽略它可能会在另一个类加载器中加载的事实。因此,好的方法是提供一些工厂方法来获取业务对象,该方法将跟踪上下文是否已加载,并在必要时创建一个。或者使用预先存在的上下文。

此外,查看服务定位器模式和http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Provider可能是个好主意

于 2012-08-27T08:33:56.510 回答