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的主要内容,如果未能解决你的问题,请参考以下文章

每日理解 Spring框架

如何在项目中通过LINK标签链接自己javascript脚本?

如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?

使用请求参数将javascript变量传递给spring MVC控制器

Hibernate延迟加载Lazy

在swift中通过inout参数编写一个var