1

これはアンチパターンですが、実際どうなるのか気になります。

引数なしのコンストラクターと自動配線されたパラメーターを持つコンストラクターを明示的に定義する場合、Spring Framework はそれをどのように正確に初期化しますか?

@Service
class Clazz {

    private MyBean myBean;

    public Clazz(){}

    @Autowired
    public Clazz(MyBean myBean){
        this.myBean = myBean;
    }
}
4

3 に答える 3

3

上記の回答に加えて、@autowire なしで宣言されたコンストラクターが 1 つある場合、Spring は同じコンストラクターを注入に使用します。

複数のコンストラクターがある場合、Spring は @autowired のコンストラクターを使用します。

Spring Doc で言及https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#beans-autowired-annotation

Spring Framework 4.3 の時点で、ターゲット Bean が最初に 1 つのコンストラクターのみを定義する場合、そのようなコンストラクターの @Autowired アノテーションは不要になりました。ただし、複数のコンストラクターが使用可能な場合は、コンテナーに使用するコンストラクターを教えるために、少なくとも 1 つに注釈を付ける必要があります。

于 2019-06-18T10:05:59.900 に答える