Spring支持独立Java库
[春天新来] 有一个服务是Spring支持的,它可以做一些事情。当这个服务启动时,它加载Spring应用程序上下文,每个人都很高兴 现在,我需要创建一个库,该库将被上述服务使用,我还希望Springify这个库包。但是,这个库的应用程序上下文何时/如何初始化?我被难住了 我想一定有很多人这样做了。最佳做法是什么 我在想,库的入口点接口中的静态块是否是初始化应用程序上下文的正确位置?(因此,它只获得一次init)Spring支持独立Java库,java,spring,jakarta-ee,spring-mvc,Java,Spring,Jakarta Ee,Spring Mvc,[春天新来] 有一个服务是Spring支持的,它可以做一些事情。当这个服务启动时,它加载Spring应用程序上下文,每个人都很高兴 现在,我需要创建一个库,该库将被上述服务使用,我还希望Springify这个库包。但是,这个库的应用程序上下文何时/如何初始化?我被难住了 我想一定有很多人这样做了。最佳做法是什么 我在想,库的入口点接口中的静态块是否是初始化应用程序上下文的正确位置?(因此,它只获得一次init) 这是正确的方法吗?它会起作用吗?还是我错过了什么?谢谢你的帮助 否,使用静态块时,您
这是正确的方法吗?它会起作用吗?还是我错过了什么?谢谢你的帮助 否,使用静态块时,您将强制Spring上下文加载,而忽略它可能会加载到另一个类加载器中的事实。因此,好的方法是提供一些工厂方法来获取业务对象,它将跟踪上下文是否已加载,并在必要时创建一个。或者使用预先存在的上下文
另外,查看服务定位器模式也是一个好主意,如果您在web应用程序中使用库,您可以在上下文xml文件中提供任意数量的应用程序
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:context1.xml
classpath:context2.xml
...
</param-value>
</context-param>
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();
}
}