1. 程式人生 > >Spring 用註解Annotation注入 abstract 抽象父類的屬性

Spring 用註解Annotation注入 abstract 抽象父類的屬性

問題:

希望把子類公共的屬性放在抽象類中。執行時,希望在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.