説明するのはちょっと難しいです...質問が曖昧でないことを願っています...
コードを見てアイデアを得ることができます...
ClassA.java
public class ClassA {
@Autowired
InterA abcd;
public void dododo() {
abcd.doit();
}
}
ClassB.java
@Component
public class ClassB implements InterA {
@Override
public void doit() {
System.out.println("hoo hoo");
}
}
ClassC.java
@Component("classc")
public class ClassC {
public void doFromAbove() {
ClassA cls = new ClassA();
cls.dododo();
}
}
インターフェースInterA.java
public interface InterA {
public void doit();
}
構成ClassConfig.java (他の Java クラス ファイルの同じパッケージ上)
@Configuration
@ComponentScan
public class ClassConfig {
}
主な方法
public static void main(String[] args) {
try(AbstractApplicationContext appctx = new AnnotationConfigApplicationContext(ClassConfig.class)) {
ClassC obj = (ClassC) appctx.getBean("classc");
obj.doFromAbove();
}
}
メイン メソッドを実行すると、Autowired フィールド「abcd」ClassA
が挿入されず、NullPointerException
ClassA
として宣言して@Component
Beanを取得した場合にのみ機能します...間接的な自動配線は行われていません
すべてを切り離しClassA
てClassC
疎結合にする必要がありますか?
オブジェクトが密結合された方法で作成された場合でも、Spring に @Autowired フィールドを自動注入するように指示するために使用できる簡単な注釈はありますか?
ClassC
の Bean を作成するために
ApplicationContext を使用するように言わないでくださいClassA
。
答えを見つけられる Spring Geek はいますか?