[春季新品]
有一项服务是启用Spring并执行某些操作。当这个服务启动时,它会加载Spring Application上下文,每个人都很高兴。
现在,我需要创建一个将由上述服务使用的库,我也希望Springify这个库包。但是,这个库的应用程序上下文何时/如何初始化?很难过!
我认为很多人必须这样做。什么是最佳做法?
我在想,可能是库中的静态块的入口点接口是初始化应用程序上下文的正确位置吗? (所以,它只会初始化一次)
这是正确的方法吗?它甚至会起作用还是我错过了什么?感谢您的帮助。
答案 0 :(得分: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在classpath中,则上面的一个工作。
如果是独立版,您可以使用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();
}
}
答案 1 :(得分:0)
不,使用静态块时,您要强制执行Spring上下文,而忽略它可能已在另一个类加载器中加载的事实。因此,好的方法是提供一些工厂方法来获取业务对象,这将跟踪上下文是否已加载并在必要时创建一个。或者使用预先存在的上下文。
同样,最好还是查看服务定位器模式和http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Provider