项目开发一个Jar lib依赖包,其中使用了spring容器技术,就有application.xml bean配置文件。问题是如果其它工程
引用这个jar包,而这个主工程也用了spring容器,也有xml bean配置文件。这种如何处理?
一般开发jar lib包时,用spring容器技术是如何设计给上层应用使用?
第一个问题,你可以通过配置ContextLoaderListener的监听文件路径,将两个项目的xml都注册到一个spring容器中,例如在web.xml中配置:
<!-- spring配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!--加入Spring配置文件-->
classpath:config/applicationContext.xml
<!-- /WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/spring-srevlet.xml -->
</param-value>
</context-param>
<!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
第二个问题,原则上开发第三方时,不应该直接使用spring容器(但可以依赖spring的jar),而是提供spring集成支持,容器一般在运行时才集成。这个东西我也不好用语言表达,举个简单例子,比如jedis是不依赖任何spring功能,但是spring-data-redis就能将jedis无缝集成到spring容器中。
如果是一个项目就spring配置一遍,所有子模块共用一个。
如果是2个项目,就分别配置啊,夸项目,jar包一般配置多次,每个项目的jar包放到当前项目中使用
1) 利用了Spring ApplicationContext 的 registerBeanDefinition方法和动态bean注册技术;
2) 作为bean管理的一个规范:要求Service类实现 setDAO(DAO dao)方法,以便统一注入dao实例;
3) 作为bean管理的一个规范:调用 dao.setDatasource(datasource)方法进行数据源注入;
4) 作为bean管理的一个规范:内部使用className作为 service bean 和dao bean的内部id;
5) 作为bean管理的一个规范:ServiceFactory内获取bean实例时,都采用prototype scope。
java 的lib 包中 不要使用 配置文件中的配置,如果必须要使用的话,要在调用 lib 的工程中配置 lib 中需要的配置。
最好jar包不要用application.xml直接命名,或者放到根目录以外的文件夹如:resources/XXX/application.xml