Spring中通过变量和import标签来控制加载哪些bean
Posted 风雨咒之无上密籍
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中通过变量和import标签来控制加载哪些bean相关的知识,希望对你有一定的参考价值。
需求:根据设置变量,来加载某个spring的bean的配置文件,这个配置文件中,有某些使用的bean。在一些情况下,不希望这些bean被初始化和加载进context中,也不需要被外面访问到。
在spring中,我们通过placeholder类可以读取配置文件,里面可以设置参数,而在配置文件或容器中使用他,如我们有一个配置文件common.properties,内容如下:
jdbc.url= jdbc.user= jdbc.password=
有一个配置类,为JdbcConfig,如下:
package cc.eabour.webapp.jdbc; public class JdbcConfig { private String url; private String user; private String password; /** * @return the url */ public String getUrl() { return url; } /** * @param url the url to set */ public void setUrl(String url) { this.url = url; } /** * @return the user */ public String getUser() { return user; } /** * @param user the user to set */ public void setUser(String user) { this.user = user; } /** * @return the password */ public String getPassword() { return password; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } }
在spring-bean.xml中配置如下:
<context:property-placeholder location="classpath:common.properties" /> <bean class="cc.eabour.webapp.jdbc.JdbcConfig"> <property name="url" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean>
我们假如在某些特定的场景下,才去初始化这个类,此时,我们新增一个xml配置文件,通过Spring的import标签,将配置文件引入:
<import resource="classpath*:springfox-bean-swagger.xml"/>
而这个springfox-bean-swagger.xml文件中,就可以像其他的配置文件一样,来配置bean。如果想控制这个import标签引入不同的配置文件,并且通过变量来实现,如:
<import resource="classpath*:springfox-${springfox.swagger.name:default}-swagger.xml"/>
我们给变量添加默认值default,因为不设置的时候,没有默认值是会报错的,说是无法处理placeholder。此时,这个变量在哪设置呢?在properties文件中设置肯定是不行的,因为解析的时候,还没加载呢,根据报错位置和调试发现,默认处理placeholder的时候,会从环境变量和虚拟机的系统变量中去取,像System.getProperty和System.getEnv一样。这样的话,我们可以给JVM添加参数来设置,如 -Dspringfox.swagger.name=product,eclipse设置在tomcat的VM参数设置,如下:
这样,通过import标签和变量,就可以控制加载哪个配置XML来初始化需要的bean。
以上是关于Spring中通过变量和import标签来控制加载哪些bean的主要内容,如果未能解决你的问题,请参考以下文章
如何在项目中通过LINK标签链接自己javascript脚本?
如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?