Spring Integration @Autowired无法正常工作

时间:2018-12-05 10:30:22

标签: spring spring-mvc spring-boot spring-integration spring-annotations

我正在使用@Autowired来创建Bean。但是我得到了NullPointer,并且没有创建Bean。

Spprinng Stater

@ComponentScan("com.api")
public class DoseManagementApplication {

public static void main(String[] args) {
    SpringApplication.run(DoseManagementApplication.class, args);
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("/integration.xml");
    DoseManager doseManager = (DoseManager) context.getBean(DoseManager.class);

    doseManager.doseMangement("");

    context.close();

}

}

Integration.xml

<int:gateway id="doseManager" service-interface="com.cerner.api.gateway.DoseManager"/>

<int:channel id="requestChannnel"></int:channel>

<int:service-activator ref="doseManagerServiceActivator" input-channel="requestChannnel" method="buildDoseMedRelation"> 
</int:service-activator>
<bean id="doseManagerServiceActivator" class="com.cerner.api.activator.DoseManagerServiceActivator"></bean>

DoseManager界面

package com.api.service;    
@Component
public interface DoseManager {

@Gateway(requestChannel="requestChannnel")
public void doseMangement(String startMsg);
}

服务激活器类

package com.api.service;
@Component
public class DoseManagerServiceActivator {

@Autowired
private DoseManagerService doseManage;

public void buildDoseMedRelation(Message<?> msg) {
    System.out.println("doseManage== "+doseManage);
}
}

服务等级

package com.api.service;
@Service
public class DoseManagerService {

}

我试图弄清楚为什么@Autowired无法正常工作。但没有成功。没有服务类。

1 个答案:

答案 0 :(得分:1)

您的问题是使用普通的new ClassPathXmlApplicationContext("/integration.xml");,而不是使用注释支持的问题。

目前还不清楚为什么要创建一个新的应用程序上下文,因为它看上去就像在Spring Boot中一样,因为您SpringApplication.run(DoseManagementApplication.class, args);。从这里,您的集成配置将加载到单独的ClassPathXmlApplicationContext中,对于Spring Boot来说是完全不可见的。

我建议您在@SpringBootApplication上与DoseManagementApplication一起使用@ImportResource("classpath:/integration.xml"),然后从getBean()致电ApplicationContext context = SpringApplication.run(DoseManagementApplication.class, args);(如果需要)并且完全不要使用ClassPathXmlApplicationContext