我正在使用@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无法正常工作。但没有成功。没有服务类。
答案 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
。