我有一个 java 命令行应用程序,它利用应用程序上下文文件中定义的 Bean。我可以使用ApplicationContextLoader
从 main 方法调用的以下类将 Bean 注入到主类中:
public class ApplicationContextLoader {
private ConfigurableApplicationContext applicationContext;
public ConfigurableApplicationContext getApplicationContext() {
return applicationContext;
}
protected void loadApplicationContext(String... configLocations) {
applicationContext = new ClassPathXmlApplicationContext(configLocations);
applicationContext.registerShutdownHook();
}
protected void injectDependencies(Object main) {
getApplicationContext().getBeanFactory().autowireBeanProperties(main, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
}
public void load(Object main, String... configLocations) {
loadApplicationContext(configLocations);
injectDependencies(main);
}
}
public static void main(String[] args) throws IOException {
DataGeneratorTestRunner dataGeneratorTestRunner = new DataGeneratorTestRunner();
dataGeneratorTestRunner.launchTests(args, APPLICATION_CONTEXT);
System.exit(0);
}
public void launchTests(String[] args, String applicationContext) throws IOException{
acl = new ApplicationContextLoader();
acl.load(this, applicationContext);
}
但是,当我尝试@Inject
在我的应用程序(不是主类)中的其他类中使用注释时,我得到空指针异常。是否有替代/更简单的方法允许我在@Inject
整个应用程序中使用注释来引用在我的应用程序上下文文件中定义的任何 Bean,而无需指定类名甚至使用上述 ApplicationContextLoader 类?
应用环境:
<bean id="currentState" class="com.company.integration.sim.State">
</bean>
<bean id="customerSim" class="com.company.integration.sim.CustomerSim">
</bean>
我按如下方式引用 Bean,它是空的:
public class CustomerSim {
@Inject private State currentState;
.
.
.