Springのセッターインジェクション

セッターによるインジェクション

@Component
public class SetterInjectionServiceImpl implements SetterInjectionService{

    //インジェクション対象
    private Test target;

    //セッターによるインジェクション
    @Autowired
    private void setTarget(Test target){
        this.target = target;
    }

    @Override
    public void show(){
        System.out.println("セッターインジェクションにてインジェクションされたインスタンス:" + target);
    }
}

呼び出し元のイメージ

       //このsetterにはすでにtargetが格納されている
        SetterInjectionService setter = context.getBean(SetterInjectionService.class);
        setter.show();

まとめ

  • DIコンテナに格納されたインスタンスは、@AutowiredのついたSetterによってフィールドに値が格納された状態のインスタンスとなる
  • というよりも、DIコンテナにインスタンスが格納されるタイミングで、@Autowiredのついたメソッドが呼び出される、くらいのイメージのがわかりやすいかも
  • その時、Autowiredのついたメソッドの引数は、インジェクションの対象となる
  • メソッドの引数に指定した値のインターフェースがインジェクションの対象にできない(Springの管理下に入っていない)と、起動時にエラーで落ちる