Spring 用注解Annotation注入 abstract 抽象父类的属性

Posted javaPie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 用注解Annotation注入 abstract 抽象父类的属性相关的知识,希望对你有一定的参考价值。

Spring 用注解Annotation注入 abstract 抽象父类的属性

原创  2016年08月10日 18:46:43

问题:

希望把子类公共的属性放在抽象类中。运行时,希望在Spring 扫描@Component注解,自动加载子类的同时,自动注入抽象父类的属性。

抽象父类:

@Component
public abstract class BaseCar 
    @Autowired
    Settings settings;

   
  • 1
  • 2
  • 3
  • 4
  • 5

子类:

@Component
public class SportsCar extends BaseCar
    public void print()
        //运行时报空指针异常,说明settings并没有通过@Autowired加载
        System.out.print(settings.getSpeed());
    

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行时报空指针异常,说明子类中,super.settings并没有通过@Autowired加载

原因是 Spring Ioc 注入的对象是实例,而不是类。

实例化子类的时候,抽象父类不可能实例化,所以属性 settings 并没有自动加载。

解决办法:

父类:

public abstract class BaseCar 
    Settings settings;

   
  • 1
  • 2
  • 3

子类:

@Component
public class SportsCar extends BaseCar
    //Autowired修饰方法时,根据方法参数类型判断实例化哪个类
    @Autowired 
    public void haha(Settings settings)
        super.settings=settings;//父类属性注入
    

    public void print()

        System.out.print(settings.getSpeed());
    

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试类:

@Component
public class Test 
    @Autowired
    SportsCar sportsCar ;
    @PostConstrust
    public void test()
        sportsCar.print();// 成功输出!abstract类的属性自动注入成功!
    

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

参考文献: 
[1] Kshitiz Sharma. http://stackoverflow.com/questions/16733509/proper-way-to-inject-parent-class-dependencies-with-spring-annotations May 24, 2013.

以上是关于Spring 用注解Annotation注入 abstract 抽象父类的属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring基于的注解自动装配和依赖注入(***)

java注解@Resource机制怎么取到注入过的Bean

java注解@Resource机制怎么取到注入过的Bean

Spring依赖注入:注解注入总结

Bean 注解(Annotation)配置- 通过注解加载Bean

spring 3.2 注解注入普通BEAN的@Resource 总是得到空指针,怎么解决?