这两天在整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());
}
}
- 浏览: 88836 次
- 性别:
- 来自: 上海
最新评论
-
woshixushigang:
loader.loadClass(servletName); ...
如何用URLClassLoader来加载一个指定目录下的class类 -
forrest420:
官网,或者ActiveMQ in Action
学习ActiveMQ -
liushilang:
你说的是,看样子写东西还得要认真,包装是不可少的。
学习ActiveMQ -
idealab:
和自由一行字,还被广告给覆盖了。
学习ActiveMQ -
src_bord:
在这里我给出我的建议~
你的13个目标数据库 不是有1 ...
如何多线程查询不同的目标数据库
相关推荐
2. **属性注入**:实例化后,Spring会根据Bean定义中的`property`或`ref`属性为Bean注入依赖。这包括了通过setter方法设置值,以及通过构造函数传递参数。 3. **初始化**:在属性注入完成后,Spring会执行Bean实现...
这篇博客主要探讨了如何通过XML配置和注解的方式来设定Spring Bean的范围。 首先,让我们理解Bean的几种基本范围: 1. **Singleton**:这是Spring的默认范围,每个Spring容器只有一个Bean实例。当容器启动时,会...
在Spring配置中,`cronExpression`属性用于定义任务的执行周期。要实现实时动态调整任务执行周期,关键在于能够动态地修改`cronExpression`的值。这通常涉及到直接操作Spring容器中的`CronTriggerBean`实例,通过...
在Spring框架中,“Bean”是指由Spring IoC容器所管理的对象。这些对象由Spring IoC容器创建、装配以及管理其生命周期。Bean通常是由XML或Java配置类定义的,并且可以通过不同的方式(如构造器注入、setter注入等)...
8. 在 Spring 中配置 Bean 的 id 属性时,id 属性值不可以重复,id 属性不是必须的,但建议每个 Bean 都有一个唯一的 id。 9. Spring 和 Hibernate 整合过程中各对象注入可以通过 setter 注入、构造方法注入和接口...
在XML配置中,可以使用`<property>`标签指定需要注入的属性,通过`<ref>`标签引用其他bean,Spring容器会在适当的时候调用setter方法完成注入。 构造注入则是通过构造函数来设定依赖关系。在配置文件中,使用`...
在Spring中配置定时器,首先需要在`applicationContext.xml`配置文件中定义定时任务相关的Bean。具体步骤如下: 1. **定义`ScheduledTimerTask` Bean**:该Bean用于封装定时任务的执行逻辑,其`delay`属性表示首次...
- `byName`:Spring会尝试查找与Bean属性名称相匹配的Bean进行注入。 - `byType`:根据Bean的类型,Spring会寻找相同类型的Bean进行注入。 - `constructor`:基于构造函数参数的类型进行自动装配。 - `auto...
在Spring Quartz中,我们需要Spring来管理Quartz的bean并整合到Spring应用上下文中。 2. `quartz-all-1.6.0.jar`:这是Quartz的全功能版本,包含所有必要的模块,包括Job执行器、触发器、调度器以及相关的依赖。...
6. **在代码中切换数据源**:在业务代码中,可以通过ThreadLocal或其他方式设置当前数据源的标识,使得在执行SQL操作时,Spring能够根据设定自动选择正确的数据源。 7. **读写分离**:多数据源的一个常见应用场景是...
- **什么是Bean:** Bean是Spring容器中的基本单元,代表应用程序中的对象。 - **Bean的基础知识:** - **Bean的标识(id和name):** 用来唯一标识Bean。 - **Bean的类(class):** 指定Bean对应的类。 - **...
在 Spring 中,可以使用 `@Value` 注解将值注入到属性中。`@Value` 支持多种方式的注入,例如普通字符、操作系统属性、表达式结果、其它 bean 属性、文件资源和网站资源。 * `@Value`:为属性注入值。 环境切换 ...
2. **Spring Bean属性元信息**:PropertyValues对象用于存储Bean的属性值,可以是可变的MutablePropertyValues。每个属性由PropertyValue对象表示,包含了属性名和对应的值。此外,AttributeAccessor用于提供Bean...
bean的实例化策略可以通过scope属性来设定,"singleton"表示单例,"prototype"表示每次请求都会创建新的实例。 初始化和销毁方法: 可以使用`init-method`和`destroyed-method`属性指定bean的初始化和销毁方法,...
"spring中,如果想用自定义主键,则不要设置sequnce.txt"提示我们,在Spring配置Hibernate时,如果希望使用自定义的主键生成策略(例如,使用UUID或者自增字段),则不应设定sequence,因为sequence是Oracle数据库...
Spring通过`org.springframework.scheduling.quartz`包中的API,将这些概念与Spring容器集成,使得我们可以利用Spring的bean管理来创建和管理Job。 集成Quartz到Spring的过程中,主要涉及以下步骤: 1. 添加依赖:...
属性注入是Bean配置的重要部分,Spring允许通过构造器注入、setter方法注入等方式,来设定Bean的属性值,这极大地提高了代码的灵活性和可测试性。 ### AOP:面向切面编程 面向切面编程是Spring提供的一项强大功能,...
在早期的Spring版本中,所有的bean定义、依赖注入以及其他配置都存储在如`bsappConfig.xml`, `spring-config.xml`, `webapp-config.xml`等这样的XML文件中。这些文件通常位于项目的`src/main/resources`目录下,以便...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...