java抽象类可以有构造函数吗_Spring 中的抽象类可以被注入吗?

提出问题:

在Spring 容器中,抽象类可以加上@Compoment注解后,实现调用内部的方法吗?

类设计与测试

抽象类加注解,无子类实现

接口

 public interface RechargeFacade {   /**    * 测试接口    */    void recharge();}

实现

 @Servicepublic abstract class RechargeFacadeImpl implements RechargeFacade {    @Override    public void recharge() {        System.out.println("asdasd1");    }}

测试

 @SpringBootApplication@ComponentScan(basePackages = {"xxxx"})public class AppFinanceApplication {    @Resource    private RechargeFacade rechargeFacade;    public static void main(String[] args) {        SpringApplication.run(AppFinanceApplication.class, args).getBean(RechargeFacade.class);    }    @PostConstruct    void init(){        System.out.println("asdasd=======");        rechargeFacade.recharge();    }}

结果

 Description:A component required a bean of type 'cn.lskiot.finance.compose.facade.RechargeFacade' that could not be found.
抽象类加一个子类继承

抽象类子类未加注解

 public class asd extends RechargeFacadeImpl {}

结果

 A component required a bean of type 'cn.lskiot.finance.compose.facade.RechargeFacade' that could not be found.

抽象类子类加注解

 @Servicepublic class asd extends RechargeFacadeImpl {}

结果

14edf6a808c8538e8c68fc20055abaf3.png

问题引入

首先明确一个问题:抽象类不能生成实例对象,spring无法注入。

原因:

spring的原理是启动服务器时读取配置文件,取得类名后利用反射机制在spring上下文中生成一个单例的对象,由spring注入属性并维护此对象的状态,抽象类在反射生成对象时就已经失败了,后面的不会进行。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页