spring针对抽象类注入属性

一直以为抽象类既然不能被实例化,那么自然的,也就不能被spring管理,既然不能被spring管理,自然也就不能使用@Autowired或者@Resource来注入属性了,但是其实是可以的,这样子,当我们有公用的代码的时候就不需要再使用类似util的方式来实现,而是通过继承就行了。下面show you code。

一、配置一下spring扫描路径beans-abs.xml:

<xmlversion="1.0"encoding="utf-8">

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.0.xsd">

context:component-scanbase-package="com.roadjava.test.spring.abs"/

二、定义一个抽象类

packagecom.roadjava.test.spring.abs;

importcom.roadjava.test.spring.abs.svc.impl.GoodsServiceImpl;

importorg.springframework.beans.factory.annotation.Autowired;

importjavax.annotation.Resource;

publicabstractclassAbstractConsumer{

//@Resource两者都可以

@Autowired

privateGoodsServiceImplgoodsServiceImpl;

publicvoidhandle(Stringstr){

goodsServiceImpl.say();

}

}

三、用到的GoodsServiceImpl:

packagecom.roadjava.test.spring.abs.svc.impl;

importorg.springframework.stereotype.Service;

@Service

publicclassGoodsServiceImpl{

publicvoidsay(){

System.out.println(111111);

}

}

四、实现抽象类

packagecom.roadjava.test.spring.abs;

importorg.springframework.stereotype.Component;

importjava.util.List;

@Component

publicclassGoodsConsumerextendsAbstractConsumer{

publicvoidconsumers(Listlist){

for(Stringstr:list){

super.handle(str);

}

}

}

五、测试:

@Test

publicvoidtest5(){

ClassPathXmlApplicationContextac=newClassPathXmlApplicationContext("spring/beans-abs.xml");

GoodsConsumerbean=ac.getBean("goodsConsumer",GoodsConsumer.class);

bean.consumers(Lists.newArrayList("a","b"));

}

运行结果:

当然你也可以把在抽象类中要被注入的属性声明为protected的,这样在子类中也可以使用了。

相关推荐
消失的旧时光-19431 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
NE_STOP1 小时前
Redis--发布订阅命令和Redis事务
java
PAC_3Dame2 小时前
记一次真实的线上OOM
java
有味道的男人2 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
SunnyDays10112 小时前
如何在Java中将Word文档转换为图像(JPEG、PNG或SVG)
java
Web极客码2 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
Lumos_7772 小时前
Linux -- 线程
java·jvm·算法
知兀2 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV2 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子2 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱