2017-03-04 201 views
0

这里是我的控制器代码以获得豆依赖注入context.getbeans

@RequestMapping("/suscribetest") 
    @ResponseBody 
    public String subscribeTest(){ 
     try{ 
      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MqttInboundBeans.class); 
      MqttPahoMessageDrivenChannelAdapter messageChannel = context.getBean("inbound",MqttPahoMessageDrivenChannelAdapter.class); 
      messageChannel.addTopic("test", 2); 


     }catch(Exception ex){ 
      System.out.println("err "+ex.getLocalizedMessage()); 
     } 
     return ""; 
    } 

和下面是我的bean类

@Configuration 
public class MqttInboundBeans { 
    @Autowired 
private UserService service; 


@Bean 
public MessageChannel mqttInputChannel() { 
    return new DirectChannel(); 
} 

@Bean 
public MessageProducer inbound() { 
    MqttPahoMessageDrivenChannelAdapter adapter = 
      new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", "testClient", 
              "DATA/#", "LD/#"); 
    adapter.setCompletionTimeout(0); 
    adapter.setConverter(new DefaultPahoMessageConverter()); 
    adapter.setQos(2); 
    adapter.setOutputChannel(mqttInputChannel()); 
    return adapter; 
} 

@Bean 
@ServiceActivator(inputChannel = "mqttInputChannel") 
public MessageHandler handler() { 
    return new MessageHandler() { 

     @Override 
     public void handleMessage(Message<?> message) throws MessagingException { 
      System.out.println(message.getHeaders()+" "+message.getPayload()); 

     } 

    }; 
} 
} 

当我试图运行应用程序它工作正常,我可以从messageHandler获得消息,但是当我试图在运行时从控制器获取BeanBean时,出现错误

Error creating bean with name 'mqttInboundBeans': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ehydromet.service.UserService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 

谢谢。

回答

0

Bean UserService不是由MqttInboundBeans生成的。 AnnotationConfigApplicationContext创建Spring Application Context接受输入作为我们的配置类,用@Configuration注释,注册Spring运行时配置类生成的所有bean。 尝试自动布线应用程序上下文,然后从中获取bean。

@Autowired 
private ApplicationContext context; 
@RequestMapping("/suscribetest") @ResponseBody public String subscribeTest(){ 
try{ 
MqttPahoMessageDrivenChannelAdapter messageChannel =(MqttPahoMessageDrivenChannelAdapter) context.getBean("inbound"); 


messageChannel.addTopic("test", 2); .... 
+0

我有一个自动装配Autowired服务那里MqttInboundBeans.java,所以如果我是个创设情境戕新的关键词的话,我又怎么去管理注入了UserService – Rawat

+1

AnnotationConfigApplicationContext依赖只会给你MqttInboundBeans定义的豆子。 ApplicationContext将包含项目中定义的所有bean。 – pkoli