簡體   English   中英

如何從bean.xml獲取bean值

[英]How to I get bean value from bean.xml

我們正在努力編寫3個消費者,使用Apache Camel and Spring來自Activemq隊列名稱的消息作為ThermalMap消費。

我是Spring新手,我試圖從bean.xml獲取特定的beanId(“amqLinkId”)值。為此,我編寫了以下3個文件。

VariablesDeclarations.java

public class VariablesDeclarations {
private String amqLink;
public String getAmqLink() {
return amqLink;
}
public void setAmqLink(String amqLink) {
this.amqLink = amqLink;
}
}

FirstConsumer.java

import org.apache.camel.CamelContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FirstConsumer {
        public static void main(String[] args) {
     ApplicationContext contextObject=new ClassPathXmlApplicationContext("bean.xml");
        //Forwarding cursor to ConsumersMiddileWare class using CamelContext
        CamelContext camelObject=contextObject.getBean("activeContext", CamelContext.class);
        System.out.println("H");
}
} 

ConsumersMiddileware.java

import org.apache.camel.builder.RouteBuilder;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ConsumersMiddileWare extends RouteBuilder{
@Override
public void configure() throws Exception {
    System.out.println("Bye");
    BeanFactory beanFactory=new ClassPathXmlApplicationContext(new String[]{"bean.xml"});
    VariablesDeclarations vd=(VariablesDeclarations) beanFactory.getBean("amqLinkId");
    System.out.println(vd.getAmqLink());
}
 }

bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
                    http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
                    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd
                    ">

<!-- Creating camelContext element for forwarding to another ConsumersMiddileware class -->
<camelContext id="activeContext" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="consumerMiddileWareContext" />
</camelContext>
<bean id="consumerMiddileWareContext" class="ActivemqPackage.ConsumersMiddileWare"></bean>

<!-- Following bean created for getting variable values into classes-->
<bean id="amqLinkId" class="ActivemqPackage.VariablesDeclarations">
    <property name="amqLink" value="activemq:queue:ThermalMap"></property>
</bean>
</beans>

WorkFlow:

如果你運行FirstConsumer.java ,它應轉發到ConsumersMiddileWare.java 。我想從bean.xml找到amqLinkId值並分配給任何String對象。

如果我找到amqLinkId值,稍后直接我想在ConsumersMiddileWare.java編寫以下代碼

  String activeMqURI=vd.getAmqLink();
  from( activeMqURI).to("bean:activemqProcessor?method=processMessage");

問題:

如果我觸發FirsrConsumer.java ,它會轉發到ConsumersMiddileWare.java它會繼續打印Bye而不是像以下方式那樣打印amqLinkId值。

 Bye
 Bye
 Bye
 Bye
 .
 .

任何人都可以解釋清楚

謝謝

問題是您的項目無法找到slf4j-simple-1.6.2.jar。 檢查您是否在我們的項目構建路徑中擁有它。 如果沒有添加它然后檢查。 您報告的實際問題和您之后編輯的問題也是完全不同的問題。

您可以使用SpringRouteBuilder而不是RouteBuilder。 這個類有一些額外的方法可以從spring應用程序上下文中獲取bean(例如spring xml文件)

public class ConsumersMiddileWare extends SpringRouteBuilder{
@Override
public void configure() throws Exception {
    VariablesDeclarations vd = lookup("amqLinkId", VariablesDeclarations.class)' 
 }

另一種方法是在常規的RouteBuilder中使用camelContext.getRegistry

public class ConsumersMiddileWare extends RouteBuilder{
@Override
public void configure() throws Exception {
    VariablesDeclarations vd = context().getRegistry().lookup("amqLinkId", VariablesDeclarations.class)' 
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM