通过javacode向Spring3添加组件

通过javacode向Spring3添加组件,java,spring,activemq,apache-camel,Java,Spring,Activemq,Apache Camel,有没有办法通过Spring的applicationConfig XML中的javacode添加ActiveMQ组件 我的主要目标是从外部属性文件中获取“brokerURL”。但是属性文件不是一个标准的属性文件,它基于XML,因此必须对其进行适当的解析并获取属性 <!-- COMPONENT BEANS --> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">

有没有办法通过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>

有几种方法

一个是真正的程序性的,比如:

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上下文交互。

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


然后使用标准属性替换。

您可以从各种来源获取属性(从其他地方获取属性可能需要代码),但我很难确定您使用的是哪种配置作为主要配置。主要是基于XML还是基于Java/注释?谢谢您的回复。这很有帮助!我正在寻找第二种方式“从其他地方连接连接工厂并进行注射”。我设置了MyAMQConfig类并创建了一个refbean。。但是获取这个错误初始化bean失败了;嵌套异常为org.springf ramework.beans.ConversionNotSupportedException:未能将类型为“com.test.properties.MyAMQConfig”的属性值转换为属性“ConnectionFactory”所需的类型“javax.jms.ConnectionFactory”;啊,我想出来了。。需要这个房子谢谢你的帮助!