SpringFramework实战指南(五)
SpringFramework实战指南(五)
- 4.3 基于 注解 方式管理 Bean
- 4.3.1 实验一: Bean注解标记和扫描 (IoC)
- 4.3.2 实验二: 组件(Bean)作用域和周期方法注解
- 4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)
- 4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)
- 4.3.5 实验五: 基于注解+XML方式整合三层架构组件
4.3 基于 注解 方式管理 Bean
4.3.1 实验一: Bean注解标记和扫描 (IoC)
-
注解理解
和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。
本质上:所有一切的操作都是 Java 代码来完成的,XML 和注解只是告诉框架中的 Java 代码如何执行。
举例:元旦联欢会要布置教室,蓝色的地方贴上元旦快乐四个字,红色的地方贴上拉花,黄色的地方贴上气球。
班长做了所有标记,同学们来完成具体工作。墙上的标记相当于我们在代码中使用的注解,后面同学们做的工作,相当于框架的具体操作。
-
扫描理解
Spring 为了知道程序员在哪些地方标记了什么注解,就需要通过扫描的方式,来进行检测。然后根据注解进行后续操作。
-
准备Spring项目和组件
- 准备项目pom.xml
<dependencies><!--spring context依赖--><!--当你引入Spring Context依赖之后,表示将Spring的基础依赖引入了--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.6</version></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.3.1</version></dependency>
</dependencies>
2. 准备组件类普通组件
/*** projectName: com.atguigu.components** description: 普通的组件*/
public class CommonComponent {
}
Controller组件
/*** projectName: com.atguigu.components** description: controller类型组件*/
public class XxxController {
}
Service组件
/*** projectName: com.atguigu.components** description: service类型组件*/
public class XxxService {
}
Dao组件
/*** projectName: com.atguigu.components** description: dao类型组件*/
public class XxxDao {
}
- 组件添加标记注解
-
组件标记注解和区别
Spring 提供了以下多个注解,这些注解可以直接标注在 Java 类上,将它们定义成 Spring Bean。
-
注解 | 说明 |
---|---|
@Component | 该注解用于描述 Spring 中的 Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如 Service 层、Dao 层等。 使用时只需将该注解标注在相应类上即可。 |
@Repository | 该注解用于将数据访问层(Dao 层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Service | 该注解通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
@Controller | 该注解通常作用在控制层(如SpringMVC 的 Controller),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。 |
通过查看源码我们得知,@Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字。对于Spring使用IOC容器管理这些组件来说没有区别,也就是语法层面没有区别。所以@Controller、@Service、@Repository这三个注解只是给开发人员看的,让我们能够便于分辨组件的作用。注意:虽然它们本质上一样,但是为了代码的可读性、程序结构严谨!我们肯定不能随便胡乱标记。2. 使用注解标记普通组件
/*** projectName: com.atguigu.components** description: 普通的组件*/
@Component
public class CommonComponent {
}
Controller组件
/*** projectName: com.atguigu.components** description: controller类型组件*/
@Controller
public class XxxController {
}
Service组件
/*** projectName: com.atguigu.components** description: service类型组件*/
@Service
public class XxxService {
}
Dao组件
/*** projectName: com.atguigu.components** description: dao类型组件*/
@Repository
public class XxxDao {
}
-
配置文件确定扫描范围
情况1:基本扫描配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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="
相关文章:

SpringFramework实战指南(五)
SpringFramework实战指南(五) 4.3 基于 注解 方式管理 Bean4.3.1 实验一: Bean注解标记和扫描 (IoC)4.3.2 实验二: 组件(Bean)作用域和周期方法注解4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)4.3.5 实验五:…...

力扣 121. 买卖股票的最佳时机
题目来源:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 好久没写代码了,啥啥都忘了 C题解1:贪心算法。(来源代码随想录) 因为股票就买卖一次,那么贪心的想法很自然就是取…...

【STM32+HAL库+CubeMX】UART轮询收发、中断收发、DMA收发方法及空闲中断详解
(转载)原文链接:https://blog.csdn.net/qq_39344192/article/details/131470735 1. 什么是UART? UART是一种异步串行通信接口,常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输,使…...

基于Java医院管理系统设计与实现(源码+部署文档)
博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…...
PHP://filter过滤器
今天刷题遇到了php://filter过滤器的知识点考察;不会,看了几篇写的不错的文章,本来想转载的,但是代码复制过来后发现格式很乱,和原文格式差太多了;算了,直接把文章连接拿过来吧,在这…...
蓝桥杯刷题day05——2023
1、题目描述 请求出在12345678 (含) 至 98765432 (含) 中 ,有多少个数中完全不包含 2023。 完全不包含 2023是指 无论将这个数的哪些数位移除都不能得到2023。 例如 20322175,33220022 都完全不包含 2023, 而20230415,20193213 …...

【51单片机】开发板和单片机的介绍(2)
前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...

《剑指 Offer》专项突破版 - 面试题 30 和 31:详解如何设计哈希表以及利用哈希表设计更加高级、复杂的数据结构
目录 一、哈希表的基础知识 二、哈希表的设计 2.1 - 插入、删除和随机访问都是 O(1) 的容器 2.2 - 最近最少使用缓存 一、哈希表的基础知识 哈希表是一种常见的数据结构,在解决算法面试题的时候经常需要用到哈希表。哈希表最大的优点是高效,在哈希表…...
回顾2023年及过去五年的成长经历
现在是2024年2月4日,我想回顾下过去两年的经历和感悟。总结下过去五年的成长经历。 最大的感悟就两点。第一,我相比于两年前成长了很多、也成熟了很多,不管是心智上还是心态上。而这些成长来自于读书、思考和结合实践的反思。第二࿰…...

99例电气实物接线及52个自动化机械手动图
给大家分享一些流水线设计中常见的一些结构,这些动态图很直观,有助于大家了解其原理,非常好懂。 1.家庭总电箱接线图 2.经典双控灯接线 3.五孔一开接线 4.电动机点动控制接线(不安全) 5.电动机自锁接线图(…...
SQL中聚合函数
SQL中的聚合函数是用于对一组值执行计算,并返回单个值的函数。它们通常在SELECT语句的SELECT列表中使用,并与GROUP BY子句结合使用来汇总数据。聚合函数忽略NULL值,只对非NULL值进行计算。以下是一些最常用的SQL聚合函数: 1. COU…...
深度学习预备知识1——数据操作
所有机器学习方法都涉及从数据中提取信息,因此需要一些关于数据的实用技能,包括存储、操作和预处理数据。 机器学习通常需要处理大型数据集。线性代数和矩阵是计算大量数据的有力工具,需要一些矩阵运算相关的线性代数知识。 深度学习是关于…...

【云原生运维问题记录】kubesphere登录不跳转问题
文章目录 现象问题排查 结论先行:kubesphere-system名称空间下reids宕机重启,会判断是否通过registry-proxy重新拉取镜像,该镜像原本是通过阿里云上拉取,代理上没有出现超时情况,导致失败。解决方案:删除re…...
深入学习Prometheus! 一款开源的监控和警报工具!
深入学习Prometheus! 一款开源的监控和警报工具! Prometheus是一个开源的监控和警报工具,它广泛用于记录和收集各种指标(如硬件资源使用情况、应用性能等),并提供强大的查询语言以帮助用户分析和查看这些数据。本文将…...
【webrtc】跟webrtc学list遍历
m98 代码:RTT G:\CDN\rtcCli\m98\src\video\call_stats.cc遍历list 进行删除 :remove_if void RemoveOldReports(int64_t now, std::list<CallStats::RttTime>* reports) {static constexpr const <...

网络安全产品之准入控制系统
文章目录 一、什么是准入控制系统二、准入控制系统的主要功能1. 接入设备的身份认证2. 接入设备的安全性检查 三、准入控制系统的工作原理四、准入控制系统的特点五、准入控制系统的部署方式1. 网关模式2. 控制旁路模式 六、准入控制系统的应用场景七、企业如何利用准入控制系统…...
为什么免费ip代理不适用于分布式爬虫?
费IP代理通常是一些公开免费提供的IP地址和端口,供用户免费使用。然而,这些免费IP代理并不适用于分布式爬虫的使用,原因如下: 1. 不稳定性 免费IP代理通常是由个人或组织提供的,没有稳定的维护和管理机制。因此&…...

【HTML 基础】元数据 meta 标签
文章目录 1. 设置字符集2. 描述网页内容3. 设置关键词4. 网页重定向5. 移动端优化注意事项结语 在网页开发中,<meta> 标签是一种十分重要的 HTML 元数据标签。通过巧妙使用 <meta> 标签,我们能够设置各种元数据,从而影响网页在浏…...

考研中常见的算法-逆置
元素逆置 概述:其实就是将 第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,依次到中间位置。用途:可用于数组的移动,字符串反转,链表反转操作,栈和队列反转等操作。 逆置图解 …...

docker exec命令流程
背景 在使用docker时,我们经常会使用docker的很多命令,比如docker exec等创建容器并执行命令,那么你知道这条命令背后的原理吗,本文就来解析下这条命令大致的执行流程图 docker exec命令 首先我们按照启动docker之后࿰…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...