通过java代码将组件添加到Spring 3

时间:2012-06-26 20:05:43

标签: java spring activemq apache-camel

有没有办法在Spring的applicationConfig XML中通过javacode添加ActiveMQ组件?

我的主要目标是从外部属性文件中选择“brokerURL”。但是属性文件不是标准属性文件,因此基于XML的文件必须适当地解析它并获取属性。

<!-- COMPONENT BEANS -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="connectionFactory">
        <bean class="org.apache.activemq.ActiveMQConnectionFactory">
            <property name="brokerURL" value="tcp://localhost:61616"/>
        </bean>
    </property>
</bean>

2 个答案:

答案 0 :(得分:1)

有几种方法。

一个是真正的程序化,如下:

org.apache.activemq.camel.component.ActiveMQComponent amq = new org.apache.activemq.camel.component.ActiveMQComponent();
amq.setConnectionFactory(new ActiveMQConnectionFactory(parseOddXml(brokerXMLConfigFile)));
camelContext.addComponent("activemq", amq);

假设你有一个驼峰上下文感知bean来初始化你的组件。

否则,您或许可以从其他地方连接连接工厂,并将其注入到ActiveMQ组件的XML配置中。

这样的事可能

 @Configuration
 class MyAMQConfig{
   public @Bean ActiveMQConnectionFactory createCF(){
      String brokerURI = parseOddXml(brokerConfigFile); // or whatever logic here.
      return new ActiveMQConnectionFactory(brokerURI);
   }
 }

然后是XML中的类似内容:

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="connectionFactory" ref="activeMQConnectionFactory"/>
</bean>

或者任何其他方式,因为有多种方法可以连接bean并与Camel Context进行交互。

答案 1 :(得分:1)

为什么不扩展PropertyPlaceholderConfigurer类以便我可以从XML文件中获取属性(使用commons-configuration或其他类似的包),并在spring配置中放置一个实例?

然后只使用标准物业替换。