码迷,mamicode.com
首页 > 编程语言 > 详细

Spring中通过变量和import标签来控制加载哪些bean

时间:2019-01-13 01:45:18      阅读:445      评论:0      收藏:0      [点我收藏+]

标签:ati   spl   geturl   com   text   http   getenv   The   虚拟   

  需求:根据设置变量,来加载某个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

标签:ati   spl   geturl   com   text   http   getenv   The   虚拟   

原文地址:https://www.cnblogs.com/flowerbirds/p/10261515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!