springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题

在使用抽象工厂开发模式的时候,公共的可复用的方法,会直接在超类工厂中进行实现,对其他服务类的引用,要么手动实例化,要么建立有参构造器,在springboot框架内,一般是进行自动注入托管。

abstract抽象类不能被实例化,在抽象类中注入服务,而抽象类不能被实例化,因此spring不能实例化抽象类,达到托管的目的。

网上有通过子类注入从而达到超类中依赖服务的目的(有一大堆冗余操作),也有说protect级别,通过懒注册能直接实例化的。(要是有用就不会写这篇博客了),当然可能是使用的框架,依赖包等不一样。

以下实现是基于spring-boot 2.1.3.RELEASE版本

1、抽象类中使用@Autowired托管实例
springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题
2、抽象类子类springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题
3、将子类进行注入托管springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题

  • 在抽象类中@Autowired注入实例,使用的时候实例对象为空,因为抽象类自身无法被实例化,因此无法被spring托管,而抽象类的子类是可以被实例化托管的,当子类被托管后,抽象类中注入的实例对象能正常注入。
    (这里像是java多态向上,向下转型的结果)

经测试以下两种方式注入子类,都能实现抽象超类中注入的实例能正常注入
springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题
但是以下这种手动实例化子类的操作,是不能达到抽象超类的实例正常注入的效果,因为超类无法被实例化,无法被spring托管,而子类也是手动实例化,并未被spring实例化托管。
springboot抽象类中注入实例,使用@Autowired注解托管实例,注入实例为空获取不到值的问题

抽象类不能实例化,因此在抽象类中不能注入其他实例,因为无法被spring托管,对抽象类的子类进行实例化托管之后,抽象类中进行注入托管的实例却能正常托管,这是为什么(个人定位是java多态的向上向下转型),有知道具体原因的大牛,烦请在留言区指点一二