说说在配置 Spring Bean 时如何动态引用其它 Bean 的属性值

如果我们的应用是以集群的方式部署,或者我们希望在运行期间能够动态调整引用的某些配置值,这时,就必须将配置信息放到数据库。因为这样不但方便集中管理,而且可以通过应用系统的管理界面对其进行动态维护,从而可以有效地增强应用系统的可维护性 。

Spring3+ 中,我们可以通过 #{beanName.propertyName} 的方式来引用另外一个 Bean 的属性值 。

假设我们的应用系统中,需要动态配置【尝试登陆的次数】,我们把它定义在数据库中,然后在通过 SysConfig 类对其进行加载:

public class SysConfig {

    /**
     * 尝试登陆的次数
     */
    private int tryLoginNum;

    private BasicDataSource dataSource;

    public void init() {
        //假设从数据库中加载配置信息
        this.tryLoginNum = 3;
    }

    public int getTryLoginNum() {
        return tryLoginNum;
    }

    public void setDataSource(BasicDataSource dataSource) {
        this.dataSource = dataSource;
    }
}

SysManager 是系统管理类,它需要获取 SysConfig 中的配置项,SysManager 定义如下:

public class SysManager {

    private int tryLoginNum;

    public int getTryLoginNum() {
        return tryLoginNum;
    }

    public void setTryLoginNum(int tryLoginNum) {
        this.tryLoginNum = tryLoginNum;
    }
}

xml 配置:





    
    
    

    
    


    
    

    
    


这里在定义 sysConfig bean 时,通过 init-method 属性指定初始化方法,再此方法中从数据库加载配置信息,然后保存在 sysConfig 的属性中。然后就可以通过 #{beanName.propertyName} 格式来动态指定其它 Bean 的属性值啦 O(∩_∩)O哈哈~

注意: 格式中是 #{xxx},而不是 ${xxx}

在基于注解或基于 JAVA 类的 Bean 配置中,可以通过 @Value(“#{beanName.propertyName}”) 的注解形式来引用其它 Bean 的属性值 。

你可能感兴趣的:(说说在配置 Spring Bean 时如何动态引用其它 Bean 的属性值)