浅析Spring的五大类注解和方法注解

news2024/9/23 12:23:50

简单的将bean对象存储到Spring容器中,可以使用五大类注解实现,也可以通过@Bean方法注解实现。

本文重点围绕这几个问题展开:

1.为什么需要五大类注解?

2.五大类注解之间有没有关系?

3.Spring使用五大类注解生成beanName问题。

4.如何使用方法注解将对象更简单的存储到容器中?


五大类注解有:Controller(控制器)、Service(服务)、Repoistory(仓库)、Configuration(配置)、Component(组件)

使用示例:

    • 为什么需要五大类注解?

之前我们存储Bean 时,需要在 spring-config 配置中添加⼀⾏ bean 注册内容才⾏,如下图所示:

⽽现在我们只需要⼀个注解就可以替代之前要写⼀⾏配置的尴尬了,不过在开始存储对象之前,我们先要来点准备⼯作:配置扫描路径,这一点非常重要。

注意:想要将对象成功的存储到 Spring 中,我们需要配置⼀下存储对象的扫描包路径,只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。

在 spring-config.xml 添加如下配置:

使用五大类注解,可以让代码的可读性提高,让程序员能够直观的判断当前类的用途。

    • 五大类注解之间有没有关系?

我们可以简单的查看一下这五大类注解的源码:

其实不难看出,@Controller、@Service、@Repository、@Configuration都是基于@Component 实现的,所以@Component 可以认为是其他4个注解的父类。

    • Spring使用五大类注解生成beanName问题。

通过前面我们对注解使用,不难发现,我们都是使用的小驼峰。一般来说按照规范,类名我们一般用大驼峰命名,然后我们在使用BeanName的时候,一般用小驼峰,把类名的首字母变成小写。

但是出现了个例,出现了不同的情况,他的类名不是用大驼峰命名,在使用beanName的时候,还是按照以往的习惯将类名首字母变成小写,这个时候就报错了。当我们使用原类名的时候就可以了,这样的问题与我们之前的使用习惯相悖,到底是什么原因呢?下面接着分析:

通过分析了,我们也可以验证一下这个函数的作用:

总结一下,如果类名使用的是大驼峰,则使用的时候用的是小驼峰,那么类名是类似APIController这种前面全部大写的,则使用的时候用原类名。

4.如何使用方法注解将对象更简单的存储到容器中?

@Bean注解只能用在方法上,而且要注意只使用一个Bean注解是无法将对象储存到容器中的。

有时候会让命名更加规范,会使⽤@Bean 注解并重命名,使⽤重命名也能正确获取到对象。注意:重命名的其实是⼀个数组,⼀个 bean 可以有多个名字。

@Bean(name = {"u1", "us1"}) 
public User user1() { 
 User user = new User(); 
 user.setId(1); 
 user.setName("Java"); 
 return user; 
} 
//并且 name={} 可以省略,如下代码所示:
@Bean({"u1", "us1"}) 
public User user1() { 
   User user = new User(); 
   user.setId(1); 
   user.setName("Java"); 
   return user; 
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常见命令 17 - 帮助命令 man,whatis,--help,info,help

目录 1. 查看命令/配置文件帮助信息 man 2. 查看简短的命令帮助信息 whatis 3. 查看简短的命令选项信息 --help 4. 另一查看命令文件帮助信息 info 5. Shell内置帮助命令 help 1. 查看命令/配置文件帮助信息 man [1] 语法:man [命令] 示例:如果想要查…

分享129个ASP源码,总有一款适合您

ASP源码 分享129个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 129个ASP源码下载链接:https://pan.baidu.com/s/1dUPOSf1BudsK-bB4FnGXfQ?pwdg3ae 提取码&#x…

黑马2021-8Vue自学笔记hm

黑马2021-8Vue教程学习笔记 文章目录黑马2021-8Vue教程学习笔记代码和笔记不断更新gitee代码仓库地址备用前端gei忽略提交文件webpack的使用初始化包管理配置文件 package.json下载webpack解决问题dependencies 和 devDependencies区别:在项目中配置webpackWebpack 中的默认约定…

python基础——列表推导式

python基础——列表推导式 文章目录python基础——列表推导式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤一、实验目的 掌握Python数据结构:列表推导式的用法。 二、实验原理 列表推导式(list comprehension)列表推导式…

【Python百日进阶-Web开发-Linux】Day235 - Win11的WSL2中安装Docker

文章目录一、Docker是什么二、Win11安装Docker2.1 官网下载2.2 系统要求🔗2.2.1 WSL 2 后端2.2.2 Hyper-V 后端和 Windows 容器2.2.3 关于 Windows 容器2.3 在 Windows 上安装 Docker Desktop2.3.1 交互式安装2.3.2 从命令行安装2.4 启动 Docker 桌面三、WSL2的Ubun…

ConcurrentHashMap的死循环问题

文章目录前言1. 情景复现2. 源码解析3. 代码调试4. 原因5. 解决前言 对于ConcurrentHashMap来说,能保证多线程下的安全问题,但是在JDK1.8中还是会出现一个bug,就是computeIfAbsent,下面就来详细说说死循环的原因 1. 情景复现 首…

进阶C语言 第二章-------《进阶指针》 (指针数组、数组指针、函数指针、回调指针)知识点+基本练习题+深入细节+通俗易懂+完整思维导图+建议收藏

绪论 书接上回,通过对数据类型进阶的认识,你肯定对各种数据类型在内存中如何存储有了了解。虽然说,这方面可能对你的编程能力没什么进步。但是,他是一本内功秘籍,当我们遇到了这方面的问题时我们可以知道可能是哪一方面…

使用 Grafana 请求API接口

目的: 使用Grafana 配合JSON API 插件 请求API接口,完成可视化,实现一些简单的请求功能 假设我们想将如下的API接口返回的json数据可视化 这里借用一下 小熊同学的 金融数据接口 用请求如下接口举例 https://api.doctorxiong.club/v1/fund/detail?code000001&startDat…

色环电容读数方法要点总结

🏡《电子元器件学习目录》 目录 1,概述2,读数方法3,颜色对照表3.1,颜色与电容值数字对照关系表3.2,颜色与10的指数数字对照关系表3.3,颜色与误差对照关系表4,总结1,概述 本文简单介绍色环电容的读数方法。 2,读数方法 如下图所示色环电容共有四个色环。最粗的被命名…

36.Isaac教程--复合消息

复合消息 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录复合消息测量类型使用复合消息的示例手臂关节速度基本轨迹命令手臂关节和末端执行器命令CompositeMetric 和 CompositeAtlas组件使用 CompositeMetric 计算距离在 Python 脚本中创…

使用bookdown构建新年日记本

简介 一年多前在 B 站发布了一个视频,预览了一下基于 bookdown 构建的日记本。本打算之后更个文字版本教程。结果一直忘了,最近通过一位读者的了解,打算把这个坑补上。 本文内容将展示如何使用 bookdown 模板并修改成自己的日记本。此外&…

某阿里员工提问:年终绩效自己给自己打3.25,会有什么后果?网友回答:必死无疑,不要犯傻!...

年底评绩效,大多数人都会给自己打高绩效,但有些人却反其道而行之。最近,一位阿里员工提出了这样的问题:自评绩效时给自己打3.25,会有什么后果?希望领导能不按常理出牌,给自己3.75。有人问&#…

HashMap1.7中的线程安全问题

文章目录前言正文前言 下面聊聊JDK1.7HashMap的死循环问题,在这之前首先要知道JDK1.7的HashMap底层是数组 链表的形式的 正文 下面给出JDK1.7的扩容代码 //扩容代码 void resize(int newCapacity) {//旧的数组Entry[] oldTable table;//旧的数组长度int oldCap…

SpringBoot+Vue--引入Element-UI创建首页-笔记2

关于Vue项目目录结构介绍 https://tiantian.blog.csdn.net/article/details/128666429?spm1001.2014.3001.5502 先安装引入Element-UI Element - The worlds most popular Vue UI framework i是install的缩写 安装完成后,可以看到package.json里已经引入 在main.js里引入…

linux系统的结构

Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。内核内核是操作系统的核心,具有很多最基本功能,它负责管理系…

Java基础之《netty(31)—用netty实现RPC》

一、需求说明 1、dubbo底层使用了netty作为网络通讯框架,要求使用netty实现一个简单的RPC框架。 2、模仿dubbo,消费者和提供者约定接口和协议,消费者远程调用提供者的服务,提供者返回一个字符串,消费者打印提供者返回…

S32G274A spi发送数组值不变问题

官方例程的spi问题 spi发送函数 下面是S32G两个spi从机发送函数 /** * brief SPI/DSPI异步传输。 * 这个函数使用提供的总线参数初始化异步传输 , 通过外部设备。 * param[in] ExternalDevice -指向传输数据的外部设备的指针 * param[in] TxBuffer -发送缓冲区的指针。 * pa…

3.1动态规划--矩阵连乘问题

写在前面:矩阵连乘的要点 1、最优解数组的含义--A[1:n]的最少数乘次数 2、数组的填写方向--斜着填 3、递推方程含义 今天开始动态规划的学习,动态规划与分治法类似,基本思想就是将待求解的问题分成若干子问题,先求解子问题&am…

Java 23种设计模式(2.创建者模式-工厂设计模式)

代码分析 通过代码的不同实现方式,了解工厂模式 代码分析之后有具体的讲解 1.业务和逻辑分开实现 public class Operation {public static double GetResult(double numberA,double numberB,String operate){double result 0;switch (operate){case "":r…

SpringBoot+Vue项目月度员工绩效考核管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…