Spring 用註解Annotation注入 abstract 抽象父類的屬性
阿新 • • 發佈:2018-12-24
問題:
希望把子類公共的屬性放在抽象類中。執行時,希望在Spring 掃描@Component註解,自動載入子類的同時,自動注入抽象父類的屬性。
抽象父類:
@Component public abstract class BaseCar { @Autowired Settings settings; }
子類:
@Component public class SportsCar extends BaseCar{ public void print(){ //執行時報空指標異常,說明settings並沒有通過@Autowired載入 System.out.print(settings.getSpeed()); } }
執行時報空指標異常,說明子類中,super.settings並沒有通過@Autowired載入
原因是 Spring Ioc 注入的物件是例項,而不是類。
例項化子類的時候,抽象父類不可能例項化,所以屬性 settings 並沒有自動載入。 解決辦法:
父類:
public abstract class BaseCar { Settings settings; }
子類:
@Component public class SportsCar extends BaseCar{ //Autowired修飾方法時,根據方法引數型別判斷例項化哪個類 @Autowired public void haha(Settings settings){ super.settings=settings;//父類屬性注入 } public void print(){ System.out.print(settings.getSpeed()); } }
測試類:
@Component public class Test { @Autowired SportsCar sportsCar ; @PostConstrust public void test(){ sportsCar.print();// 成功輸出。abstract類的屬性自動注入成功。 } }
參考文獻:
[1] Kshitiz Sharma. http://stackoverflow.com/questions/16733509/proper-way-to-inject-parent-class-dependencies-with-spring-annotations May 24, 2013.