目前我有一个包含许多数据存储服务的实用程序 jar。在幕后,这些数据存储服务使用 Spring Data MongoDB,并且一切都使用实用程序 jar 中的 app-context.xml 文件进行配置。我希望此实用程序 jar 能够更改后备存储,而无需更改使用此实用程序 jar 的任何内容。
现在,我想创建一个使用此实用程序 jar 中的数据存储服务的 spring mvc Web 应用程序。
如何进行设置,以便 spring mvc web 应用程序(或任何其他 jar)可以轻松使用数据存储服务,而不必对实用程序 jar 了解太多,但仍然正确加载实用程序 jar 中的 bean?
我正在考虑向实用程序 jar 添加一个新的 java bean 类,它将应用程序上下文加载到它自己的 jar 中,然后为服务设置一些属性。然后 spring mvc 将在我的实用程序 jar 中使用这个新类创建一个 bean,并通过这个 bean 引用服务。
/**
* This bean would exist in the utility jar, and other jars/webapps would
* create a new instance of this bean.
*/
public class Services {
private MyAService myAService;
private MyBService myBService;
public Services() {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("app-context.xml");
// these are configured in the app-context.xml
this.myAService = ctx.getBean("myAService");
this.myBService = ctx.getBean("myBService");
}
}
这是解决这个问题的好方法吗?好像我现在有两个 spring 应用程序上下文,可以吗?如何确保加载了正确的 app-context.xml,而不是来自另一个 jar 的?有没有更好的方法来做到这一点?