Bean内の@Autowiredに問題があります。簡略化されたコード構造を投稿しました。@Configurationで注釈が付けられた2つのクラスと2つの単純なBeanがあります。クラスDでは、自動配線されたBeanは注入されません。では、構造を変えずにNPEを解くことができるのだろうか。
クラスA:
@Configuration
public class A {
@Autowired
private B b;
@Bean
publict Other other() {
b.doFoo();
Other other = new Other();
}
@Bean
public C c() {
return new C();
}
}
クラスB:
@Configuration
public class B {
@Bean
public D d() {
return new D();
}
public void doFoo() {
d().doBar();
}
}
クラスCの内部構造は関係ありません。したがって、クラスD:
public class D {
@Autowired
C c;
public void doBar() {
c.doFooBar(); // And here we got NPE
}
}
Bean Dの初期化をBからAに移動し、それをBに自動配線すると、すべてが正常に機能することに注意する必要があります。
@Configuration
public class A {
@Autowired
private B b;
@Bean
publict Other other() {
b.doFoo();
Other other = new Other()
}
@Bean
public C c() {
return new C();
}
@Bean
public D d() {
return new D();
}
}
@Configuration
public class B {
@Autowired
private D d;
public void doFoo() {
d.doBar();
}
}
しかし、この方法は適していません。