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.

猜你喜欢

转载自blog.csdn.net/hellozhxy/article/details/85140156