1

説明するのはちょっと難しいです...質問が曖昧でないことを願っています...

コードを見てアイデアを得ることができます...

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として宣言して@ComponentBeanを取得した場合にのみ機能します...間接的な自動配線は行われていません

すべてを切り離しClassAClassC疎結合にする必要がありますか?

オブジェクトが密結合された方法で作成された場合でも、Spring に @Autowired フィールドを自動注入するように指示するために使用できる簡単な注釈はありますか?

ClassCの Bean を作成するために ApplicationContext を使用するように言わないでくださいClassA

答えを見つけられる Spring Geek はいますか?

4

5 に答える 5