【Spring】注解实现IOC操作,你理解了吗?
作者:狮子也疯狂
专栏:《spring开发》
坚持做好每一步,幸运之神自然会驾凌在你的身上
专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大
家支持一下。
| 专栏 | 名字 |
|---|---|
| Elasticsearch专栏 | es |
| spring专栏 | spring开发 |
| redis专栏 | redis学习笔记 |
| 项目专栏 | 项目集锦 |
| 修bug专栏 | bug修理厂 |
目录
- 一.🦁 前言
- 二.🦁 注解实现配置
- Ⅰ.🐇 准备工作
- Ⅱ.🐇 注解实现IOC
- 2.1 @Component
- 2.1.1 作用
- 2.1.2 对比与使用
- 2.2 @Repository、@Service、@Controller
- 2.2.1 作用
- 2.2.2 使用
- 2.3 @Scope
- 2.3.1 作用
- 2.3.2 使用
- 2.4 @Autowired
- 2.4.1 作用
- 2.4.2 使用
- 2.5 @Value
- 2.5.1 作用
- 2.5.2 用法
- 2.6 @Configuration
- 2.6.1 作用
- 2.6.2 用法
- 2.7 @PropertySource
- 2.7.1 作用
- 2.7.2 用法
- 2.8 @Bean
- 2.8.1 作用
- 2.8.2 用法
- 三.🦁 总结
一.🦁 前言
前面讲解了IOC的基本概念以及操作演示,但是spring配置文件较多,操作起来相对麻烦。今天我们使用注解来操作实现IOC的功能。
二.🦁 注解实现配置
注解配置和xml配置对于Spring的IOC要实现的功能都是一样的,只是配置的形式不一样。
Ⅰ.🐇 准备工作
- 创建一个新的Spring项目。
- 编写pojo,dao,service类。
- 编写空的配置文件
需要用到的连接数据库等配置都已经配置完成。
如果想让该文件支持注解,需要添加新的约束头,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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.xsd">
</beans>
Ⅱ.🐇 注解实现IOC
2.1 @Component

2.1.1 作用
作用:用于创建对象,放入Spring容器,相当于 < bean id="" class=" " >
位置:类上方
tips:
1.要在配置文件中配置扫描的包,扫描到该注解才能生效。
<context:component-scan base-package="com.jackie"> </context:component-scan>
2.@Component 注解配置bean的默认id是首字母小写的类名。也可以手动设置bean的id值。
2.1.2 对比与使用
eg1:
@Component
public class StudentDaoImpl implements StudentDao{public Student findById(int id) {// 模拟根据id查询学生return new Student(1,"Jackie","茂名");}
}
eg2:
@Component("studentDao")
public class StudentDaoImpl implements StudentDao{public Student findById(int id) {// 模拟根据id查询学生return new Student(1,"java","茂名");}
}
此时eg1 bean的id为studentDaoImpl
此时eg2 bean的id为studentDao
2.2 @Repository、@Service、@Controller

2.2.1 作用
作用:这三个注解和@Component的作用一样,使用它们是为了区分该类属于什么层。
位置:
- @Repository用于Dao层
- @Service用于Service层
- @Controller用于Controller层
2.2.2 使用
@Repository
public class StudentDaoImpl implements StudentDao{}
@Service
public class StudentService {}
2.3 @Scope
2.3.1 作用
作用:指定bean的创建策略
位置:类上方
取值:singleton prototype request session globalsession

2.3.2 使用
@Service
@Scope("singleton")
public class StudentService {}
2.4 @Autowired
2.4.1 作用
作用:从容器中查找符合属性类型的对象自动注入属性中。用于代替 < bean > 中的依赖注入配置。

位置:属性上方、setter方法上方、构造方法上方。
2.4.2 使用
eg1:
@Autowired 写在属性上方进行依赖注入时,可以省略setter方法。
@Component
public class StudentService {@Autowiredprivate StudentDao studentDao;public Student findStudentById(int id){return studentDao.findById(id);}
}
@Test
public void t2(){ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");StudentService studentService = (StudentService) ac.getBean("studentService");System.out.println(studentService.findStudentById(1));
}
eg2:容器中没有对应类型的对象会报错
// 如果StudentDaoImpl没有放到容器中会报错
//@Component("studentDao")
public class StudentDaoImpl implements StudentDao{public Student findById(int id) {// 模拟根据id查询学生return new Student(1,"Jackie","茂名");}
}
eg3:容器中有多个对象匹配类型时,会找beanId等于属性名的对象,找不 到会报错。
// 如果容器中都多个同类型对象,会根据id值等于属性名找对象
@Component("studentDao")
public class StudentDaoImpl implements StudentDao{public Student findById(int id) {// 模拟根据id查询学生return new Student(1,"Jackie","茂名");}
}@Component
public class StudentDaoImpl implements StudentDao{public Student findById(int id) {// 模拟根据id查询学生return new Student(1,"Jackie","茂名");}
}
2.5 @Value
2.5.1 作用
作用:注入String类型和基本数据类型的属性值。

位置:属性上方
2.5.2 用法
eg1:直接设置固定的属性值
@Service
public class StudentService {@Value("1")private int count;@Value("hello")private String str;
}
eg2:获取配置文件中的属性值
- 编写配置文件db.properties
jdbc.username=root
jdbc.password=123456
- spring核心配置文件扫描配置文件
<context:property-placeholder location="db.properties">
</context:property-placeholder>
- 注入配置文件中的属性值
@Value("${jdbc.username}")
private String username;@Value("${jdbc.password}")
private String password;
2.6 @Configuration
2.6.1 作用
作用:纯注解实现IOC需要一个Java类代替xml文件。这个Java类上方需要添 加@Configuration,表示该类是一个配置类,作用是代替配置文件。
位置:配置类上方
tips:
@Configuration 一般配合@ComponentScan(指定spring在初始化容器时扫描的包)使用。
2.6.2 用法
eg1:
@Configuration
@ComponentScan("com.jackie")
public class SpringConfig {
}
2.7 @PropertySource
2.7.1 作用
作用:代替配置文件中的 context:property-placeholder 扫描配置文件
位置:配置类上方
注意:配置文件位置前要加关键字 classpath
2.7.2 用法
@Configuration
@PropertySource("classpath:db.properties")
public class JdbcConfig {@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;
}
2.8 @Bean
2.8.1 作用
作用:将方法的返回值对象放入Spring容器中。如果想将第三方类的对象放入容器,可以 使用@Bean

位置:配置类的方法上方。
属性:name:给bean对象设置id
tips:@Bean修饰的方法如果有参数,spring会根据参数类型从容器中查找可用对象。
2.8.2 用法
eg1:
如果想将jdbc连接对象放入Spring容器,因为我们无法修改Connection源码,所以无法添加@Component将其放到spring容器中,此时就需要使用将@Bean该对象放入Spring容器
将Connection对象放入Spring容器:
@Bean(name = "connection")
public Connection getConnection(){try {Class.forName("com.mysql.cj.jdbc.Driver");return DriverManager.getConnection("jdbc:mysql:///mysql", "root", "root");}catch (Exception e) {return null;}
}
三.🦁 总结
基于注解式开发spring,相对来说比较少,但是理解这些注解的作用,会对后面学习spring boot产生比较大的影响。所以还是应该重视一下,多用多做就能掌握啦。今天的分享到此结束,我是狮子,希望可以帮到您。
相关文章:
【Spring】注解实现IOC操作,你理解了吗?
作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会驾凌在你的身上 专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏名字El…...
微搭低代码从入门到精通01-总体介绍
在过去我们开发小程序,要学习各类知识。比如前端知识、后端知识、服务器知识及各种中间件及数据库的知识。 要想学会这些知识,既需要投入大量的学习时间,而且要经过相当的实践才可以掌握。 如果立志从事开发行业,投入精力去学习…...
类的继承
类的继承:一个类继承另一个类,自动拥有这个类的属性和方法,类似于包含与被包含的关系。被继承的类称为父类--子类则是继承父类的类。一个父类可以有多个子类;一个子类可以有多个父类(多继承)问题创建子类时…...
应用场景一:西门子PLC通过桥接器连接MQTT服务器
应用场景描述: 云平台、MES等数据采集、设备管理系统,需要通过MQTT的方式,上传和下发数据,MQTT服务器可以获取PLC的实时状态数据,也可以下发控制指令。桥接器提供4G、WIFI和有线三种连接方式。 网络拓扑:…...
计算机组成原理(四)
1.理解存储器的分类方法;理解存储器的层次结构;熟悉存储器的几个技术指标(主要是存储容量、存取时间、存取周期、存储器带宽等); 存储器分类方法: 按与CPU的连接和功能分类: 主存储…...
状态机设计举例
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库…...
Kubernetes1.25中Redis单机和集群部署实例二
1、概述我们知道在 Kubernetes 容器编排平台中, 我们可以非常方便的进行应用的扩容缩, 同时也能非常方便的进行业务的迭代,本章主要讲解在Kubernetes1.25搭建Redis单实例和Redis集群主从同步的环境流程步骤, 如果是高频访问重要的线上业务我们最好是部署在物理机器上…...
【STM32】【HAL库】遥控关灯0 概述
相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 家里有几个房间,开关距离床都挺远的 睡觉想要关灯的时候需要下床 因此设计了本次项目 需要满足以下要求: 可以控…...
C语言学习笔记(三): 选择结构程序设计
if语句 if(){} if (a1){printf("hehe");} //单独一个ifif(){}else{} int a 1, b 2;if (a b) {printf("haha"); //if else}else{printf("hehe");}if(){}else if(){} int a 1, b 2;if (a b) {printf("haha");}else if (a …...
图----无向图
1.定义 图的定义:图是由一组顶点和一组能够将两个顶点相连的边组成 边:edge 顶点:vertex 连通图:如果从任意一个顶点都存在一条路径到达另外一个任意顶点,我们称这幅图是连通图。 非连通图:由若干连通的…...
【C++1】函数重载,类和对象,引用,/string类,vector容器,类继承和多态,/socket,进程信号
文章目录1.函数重载:writetofile(),Ctrue和false,C0和非02.类和对象:vprintf构造函数:对成员变量初始化析构函数:一个类只有一个,不允许被重载3.引用:C中&取地址,C中…...
JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用
JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用 1.简介: Compose 中的 ConstraintLayout ConstraintLayout 是一种布局,让您可以相对于屏幕上的其他可组合项来放置可组合项。它是一种实用的替代方案,可代替使用多个已嵌…...
Spring Boot 快速入门(绝对经典)
目录 1、理论概述 1.1、什么是Spring Boot? 1.2、Spring Boot的特点 1.3、开发环境 2、实战——创建和配置项目 2.1、Spring Boot项目创建的两种方式 2.1.1、方法一:通过网站构建项目 2.1.2、使用Spring Initializr创建(推荐) 2.2、…...
golang context上下文
文章目录一、为什么需要context二、context 接口三、Background 方法四、 with 系列函数1、WithCancel 方法2、WithDeadline 方法3、WithTimeout 方法4、WithValue 方法五、使用注意事项一、为什么需要context 在 Go http包的Server中,每一个请求在都有一个对应的 …...
Linux---Linux是什么
Linux 便成立的核心网站: http://www.kernel.org Linux是什么 Linux 就是一套操作系统 Linux 就是核心与系统呼叫接口那两层 软件移植:如果能够参考硬件的功能函数并据以修改你的操作系统程序代码, 那经过改版后的操作系统就能够在另一个硬…...
C语言(Tgmath.h库(C99),exit和atexit)
一.Tgmath.h库(C99) C99标准提供得tgmath.h头文件定义了泛型类型宏。比如在math.h中为一个函数定义了3中类型(float,double和long double)的版本,那么tgmath.h文件就创建一个泛型类型宏,与原来的float,double和long double版本的…...
LeetCode 刷题系列 -- 739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入:temperatures …...
如何生成毕业论文的目录和创建模板
有粉丝同学最近在写毕业论文,其中比较让人恼火的是毕业论文的目录,折腾了几遍没弄好,想让我写个简单地教程,那就来吧。主要分为三步:第一步是从模板里面提取标题的样式,第二步是对自己的论文使用设置好的标…...
新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了
春招了,公司来了个小伙子,一看简历,嘿?22岁,这不刚毕业的小毛孩子嘛,结果没想到人家上来就把现有项目的性能优化了一遍,给公司节省了一半的成本,这种“王炸”打法,直接给…...
Window10开放某个端口
需求:由于防火墙原因,开放某个端口:如9999 在开始那里搜索防火墙-进入防火墙 第一步:核实是否启动了防火墙,之后进行 第二步:点击“高级设置”,→“入站规则”→“新建规则”→“端口”→ “下一步” …...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

