アプリケーション コンテキスト ファイルで定義された Bean を使用する Java コマンド ライン アプリケーションがあります。ApplicationContextLoader
メイン メソッドから呼び出される次のクラスを使用して、メイン クラスに 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
アプリケーション内の他のクラス (メイン クラスではない) で注釈を使用しようとすると、Null ポインター例外が発生します。@Inject
クラス名を指定したり、上記の ApplicationContextLoader クラスを使用したりしなくても、アプリケーション全体でアノテーションを使用して、アプリケーション コンテキスト ファイルで定義された任意の Bean を参照 できる代替/簡単な方法はありますか?
アプリケーションのコンテキスト:
<bean id="currentState" class="com.company.integration.sim.State">
</bean>
<bean id="customerSim" class="com.company.integration.sim.CustomerSim">
</bean>
null である次のように Bean を参照しています。
public class CustomerSim {
@Inject private State currentState;
.
.
.