zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    EasyPlayer RTSP Android安卓播放器实现视频源快速切换
    EasyPlayer RTSP Android安卓播放器实现视频源快速切换
    使用EasyPusher进行手机低延时直播推流便捷开发
    使用EasyPusher进行手机低延时直播推流便捷开发
    EasyPlayerPro windows播放器之多窗口播放音量控制方法
    EasyPlayerPro windows播放器之多窗口播放音量控制方法
    EasyPlayerPro windows播放器本地音频播放音量控制实现
    EasyPlayerPro windows播放器本地音频播放音量控制实现
    EasyPlayerPro Windows播放器进行本地对讲喊话音频采集功能实现
    EasyPlayerPro Windows播放器进行本地对讲喊话音频采集功能实现
  • 原文地址:https://www.cnblogs.com/flowerbirds/p/10261515.html
Copyright © 2011-2022 走看看