`
liushilang
  • 浏览: 85861 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

动态设定Spring中bean的属性

 
阅读更多

这两天在整Spring的JMS
我们需要动态的设定message receiver的selector选择性的接受消息
Spring的做法是要在DefaultMessageListenerContainer里设定selector的属性,可是要写在配置文件里,这样就不能动态设定了

仔细研究了下Spring的文档,发现了解决办法:
可以使用一个类的静态或非静态的方法来指定另外一个bean的属性
要用到 org.springframework.beans.factory.config.MethodInvokingFactoryBean 这个助手类
在配置文件里配置它的targetClass--指定一个类,targetMethod-指定要调用的静态方法,这个方法返回的结果作为一个bean指派给目标bean的具体属性

举一个简单的例子:
我们要动态的设定ExampleBean里的name属性,ExampleBeanHelper是其助手类,有一个静态方法getName();

public class ExampleBean {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

public class ExampleBeanHelper {
    private static String name = null;

    public static String getName() {
        return name;
    }

    public static void setName(String name) {
        ExampleBeanHelper.name = name;
    }

}

<beans>
    <bean id="exampleBean"
        class="com.dsrcom.ecq.service.mhc.ExampleBean">
        <property name="name">
            <ref local="beanNameHelper" />
        </property>
    </bean>

    <bean id="beanNameHelper"
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass">
            <value>com.dsrcom.ecq.service.mhc.ExampleBeanHelper</value>
        </property>
        <property name="targetMethod">
            <value>getName</value>
        </property>
    </bean>
</beans>

单元测试:
public class TestDynamicBeanPropertySet extends TestCase {
    private ClassPathXmlApplicationContext context = null;

    public void setUp() {
        ExampleBeanHelper.setName("bean");
        context = new ClassPathXmlApplicationContext(
                new String[] { "classpath:com/dsrcom/ecq/service/mhc/bean.xml" });
    }
    
    public void testBean() {
        ExampleBean bean = (ExampleBean)context.getBean("exampleBean");
        
        assertEquals("bean", bean.getName());
    }
}

分享到:
评论

相关推荐

    开源框架 Spring Gossip

    JDBC 编程式交易管理 JDBC 宣告式交易管理 交易的属性介绍 TransactionAttributeSource、 TransactionAttribute Hibernate 支援 Spring 整合了对 Hibernate 的设定,并提供有 ...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能...附录B 在Spring中开发Web Service

    07-IoC配置-scope属性

    singleton:设定创建出的对象保存在spring容器中,是一个单例的对象(bean默认是单例) 单例的对象是在加载spring容器时就创建了,且此后你在同一个bean获取资源时,用getBean()方法得到的对象都是同一个地址值的...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能...附录B 在Spring中开发Web Service

    springboot学习思维笔记.xmind

    通过设定jvm的spring.profiles.active参数 web项目设置在Servlet的context parameter中 事件Application Event 自定义事件,集成ApplicationEvent 定义事件监听器,实现ApplicationListener 使用容器...

    swing界面设计之JTree

    定义 bean 属性 21 创建 to-do 列表:创建一个可重用组件并在表中显示数据 23 创建一个可重用的面板 23 将 bean 组合在一起 24 添加一个表并重用这个面板 26 定义表模型 28 显示列表中的项 29 创建 to-do 列表:完成...

    单点登录sso-shiro-cas-maven

    &lt;bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"&gt;&lt;/bean&gt; &lt;bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"&gt; ...

    java面试宝典

    123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别是什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 127、在JSP如何包含一个静态文件? 32 128...

    千方百计笔试题大全

    123、JSP中动态INCLUDE与静态INCLUDE的区别? 31 124、两种跳转方式分别是什么?有什么区别? 31 125、如何执行一个线程安全的JSP? 31 126、JSP如何处理HTML FORM中的数据? 31 127、在JSP如何包含一个静态文件? 32 ...

    java面试题

    23. JSP中动态INCLUDE与静态INCLUDE的区别? 14 24. List, Set, Map区别 14 25. 集合类都有哪些?主要方法? 14 26. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 14 27. XML文档定义有几种形式?它们之间有何本质...

    J2EE面试题

    9) aa.jsp与bb.jsp属于同一应用,在aa.jsp中使用&lt;jsp:useBean id="beanName" scope="session" class="mypackage.mybean" /&gt;标记,在bb.jsp中要把beanName这个bean对象变量所引用的对象取出来。那么对于以下描述,...

    Java面试宝典2010版

    14. JSP中动态INCLUDE与静态INCLUDE的区别? 15、两种跳转方式分别是什么?有什么区别? 16、页面间对象传递的方法 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 18、MVC的各个部分都有那些技术...

    最新Java面试宝典pdf版

    14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 90 18、MVC的各个部分都有...

    Java面试笔试资料大全

    14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 90 18、MVC的各个部分都有...

    DWR.xml配置文件说明书(含源码)

    spring beanName 从配置文件中读取的bean的名称 “scope参数允许你配置creator的生命周期,共有以下几个选项:application,session,request,page.这些参数对于用过jsp或servlet的开发人员并不陌生. 3.1 Uing static ...

    JAVA面试宝典2010

    14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 90 18、MVC的各个部分都有...

    Java面试宝典-经典

    14. JSP中动态INCLUDE与静态INCLUDE的区别? 89 15、两种跳转方式分别是什么?有什么区别? 89 16、页面间对象传递的方法 89 17、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 90 18、MVC的各个部分都有...

Global site tag (gtag.js) - Google Analytics