セッターによるインジェクション
@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);
}
}
呼び出し元のイメージ
SetterInjectionService setter = context.getBean(SetterInjectionService.class);
setter.show();
まとめ
- DIコンテナに格納されたインスタンスは、@AutowiredのついたSetterによってフィールドに値が格納された状態のインスタンスとなる
- というよりも、DIコンテナにインスタンスが格納されるタイミングで、@Autowiredのついたメソッドが呼び出される、くらいのイメージのがわかりやすいかも
- その時、Autowiredのついたメソッドの引数は、インジェクションの対象となる
- メソッドの引数に指定した値のインターフェースがインジェクションの対象にできない(Springの管理下に入っていない)と、起動時にエラーで落ちる