Spring でのフィールド自動注入における継承の課題
Autowiredアノテーションまたはリソースアノテーションを使用することで、Springにおけるフィールドの自動挿入における継承の問題を解決できます。
親クラスのフィールドが@Autowiredや@Resourceで注釈されている場合、それを継承したサブクラスではそれらの注釈も継承されます。つまり、サブクラスのフィールドは注釈を再度宣言しなくても自動的に注入されることを意味します。
例えば、以下の親クラスと子クラスの例を考えてみましょう。
public class ParentClass {
@Autowired
private SomeDependency someDependency;
// getter and setter
}
public class ChildClass extends ParentClass {
// no need to declare @Autowired again
}
この例をみれば、ChildClassというサヴクラスが自動注入されたその親クラスParentClassのsomeDependencyフィールドを受け継ぐことがわかります。サヴクラスで@Autowiredアノテーションをもう一度宣言する必要はありません。サヴクラスは親クラスのアノテーションを自動的に継承します。
親クラスと同じフィールド名がサヴクラスで宣言されており、かつ@Autowiredや@Resourceアノテーションを使用していない場合、そのフィールドは自動注入されない。自動注入を実現するためには、サヴクラスのフィールド名が親クラスのフィールド名と同一である必要がある。