Spring为什么这么火 之 五大类注解

news2024/9/23 13:29:59

目录

前言

存储Bean对象

1、配置扫描路径

2、将Bean存储到容器中

2.1、5大注解实现(@Controller、@Service、@Repository、@Component、@Configuration)

@Controller

 @Service

 @Repository

 @Configuration

 @Component

 为什么需要五个类注解?

五大类注解的关系: 

2.2、方法注解实现(@Bean)


前言

        在上一篇文章中,我们提到了Spring的创建及bean的存储和获取:http://t.csdn.cn/tu9P1

        在上篇文章中,我们存储bean时,在xml文件中,只要我们需要创建一个对象,就要需要在文件中声明一次,一个项目中,对象可能就是成百上千个,每个都需要声明,那这实属是纯纯体力活,因此引入了注解来声明!


存储Bean对象

1、配置扫描路径

所有的步骤都是和上一篇文章是一样的,唯一不同就是Spring.xml文件中:

 我的这里的Spring.xml文件:

<?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:content="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 https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.beans"></content:component-scan>
</beans>

在你那里需要修改什么呢:

 根据自己需要引入的路径,进行填写


2、将Bean存储到容器中

2.1、5大注解实现(@Controller、@Service、@Repository、@Component、@Configuration)

@Controller——控制器

@Service——服务

@Repository——仓库

@Component——配置/布局

@Configuration——组件

        为了下面的测试,我们创建一个项目【具体怎么创建项目结合上一篇博客和上述的配置扫描路径来创建】

@Controller

运行结果:

 

 但是上述代码存在很严重的问题:

        这种方式 获取bean,如果一个类存入Spring多个,此写法就会抛出异常,而如果我们加上id,那岂不是和不使用五大类注解一样了,因此这里采用小驼峰结构的类名,来作为bean id 的参数:

具体规则:

  • 当使用五大类注解时,默认情况下获取bean对象,只需要将类名首字母小写即可
  • 特例:当Bean对象的首字母和第二个字母都是大写的时,此时需要使用原类名才能正确的获取到Bean对象 

 注意:

  • 注解不能省略
  • 要存入Spring中的bean,必须处于根目录下,而且注解不可省略~

五大类注解使用其实差不多,后面四个都和上面的一样: 

 @Service

 @Repository

 @Configuration

 @Component

 

 为什么需要五个类注解?

  •  通过类注解可以了解当前类的用途(提高代码可读性)
  • 功能有细微不同

五大类注解用途:

  • @Controller(控制器):归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性
  • @Service(服务):归属于服务层,调用持久化类实现相应的功能【不能和数据库交互,它类似于控制中心】
  • @Repository(仓库):归属于持久层,是直接和数据库进行交互的。通常每一个表都会对应一个@Repository
  • @Configuration(配置):归属于配置层,是用来配置当前项目的一些信息
  • @Component(组件):归属于公共工具类,提供某些公共方法

五大类注解的关系: 

点击查看各个类注解的实现: 

 结论:@Component是@Controller、@Service、@Repository、@Configuration的父类

2.2、方法注解实现(@Bean)

 使用@Bean方法注解:将返回的对象存储到Spring中

注意:@Bean注解一定要配合5大类注解一块儿使用,否则是无效的方法注解

 好啦,本期结束了,下期再见~

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

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

相关文章

Jmeter分布式

Jmeter的分布式控制&#xff0c;就是指远程启动功能。执行原理&#xff1a; 1、一台作为调度机(master)&#xff0c;其它机器做为执行机(slave) 2、执行时&#xff0c;master会把脚本发送到每台slave上&#xff0c;slave 拿到脚本后就开始执行 3、执行完成后&#xff0c;sla…

go语言编译文件踩坑

目录 1 no required module provides package xxx go.mod file not found in current directory or any parent directory; see go help modules 方式1 执行 go env -w GO111MODULEauto后再编译 方式2 创建go.mod 2 报错syscall.go:84:16: undefined: unsafe.Slice 3 b…

ArrayList集合类和对象数组案例区别讲解

目录 对象数组案例讲解 集合 ArrayList类的构造方法和成员方法 对象数组案例讲解 创建一个学生数组&#xff0c;存储三个学生对象并遍历 package com.demo01; /*** * author 无限嚣张菜菜* 分析&#xff1a;* A&#xff1a;定义学生类* B&#xff1a;创建学生数组* C&am…

关于PKI 你了解多少

公钥基础设施PKI&#xff08;Public Key Infrastructure&#xff09;&#xff0c;是利用公开密钥机制建立起来的基础设施&#xff0c;在信息互联互通时代&#xff0c;可以说它是创建、颁发、管理、注销公钥证书所涉及的所有软件、硬件集合体。对拥有庞大用户的系统来说&#xf…

Activity的5种启动模式详解(新增singleInstancePerTask类型)

前言 看到这个标题的时候&#xff0c;也许你会认为我写错了&#xff0c;Activity不是只有四种启动模式吗&#xff1f;分别为startard,singleTop,singleTask,singleInstance这四种。 一般来说是四种&#xff0c;但是android12的时候新加入了singleInstancePerTask类型&#xf…

【金三银四系列】之MySql面试突击(2023版)

Mysql金三银四面试突击班 1.Bin log是什么&#xff0c;有什么用&#xff1f;&#xff08;数据库被人干掉了怎么办&#xff1f;&#xff09; 1.bin Log: 数据恢复 主从复制 MySQL Server 层也有一个日志文件&#xff0c;叫做 binlog&#xff0c;它可以被所有的存储引擎使用。…

PRD-产品需求说明文档

产品需求说明文档&#xff08;PRD&#xff09;可以将产品设计思路清晰的展现给团队人员&#xff0c;便于他们快速理解产品。产品需求说明文档如何写呢&#xff1f;本文希望能够得到高人指点&#xff0c;本人是小白&#xff0c;同时不建议其他小白参考此文以免造成干扰。 包括文…

Spark 学习案例

案例1&#xff1a;搜索引擎日志分析 数据来源&#xff1a;使用搜狗实验室提供的【用户查询日志】数据。使用Saprk框架&#xff0c;将数据封装到RDD中进行数据处理分析。 数据网址&#xff1a;数据地址 这个地址可能过期了&#xff0c;需要的伙伴可以私聊博主。 数据格式&…

css清除浮动的方法

浮动的盒子会脱离标准流&#xff0c;不占有自己原先的位置&#xff0c;导致下面的其他标签往上移动 此时&#xff0c;可以给浮动的盒子添加一个父盒子&#xff08;块级&#xff09;&#xff0c;并设置高度&#xff0c;就可以避免下面的其他标签上浮 但是有时候父盒子不能设置高…

pycharm:新建虚拟环境和安装依赖

前言 小编深有体会&#xff0c;在刚开始用pycharm跑python的项目的时候&#xff0c;一时间不知道如何下手&#xff0c;特别是作为一个新手小白&#xff0c;这里总结了一份新手避坑指南&#xff0c;主要是新建虚拟环境&#xff08;生成一个项目对应的解释器&#xff09;以及安装…

温度预测 python | 使用 Python 可以使用机器学习模型进行温度预测

使用 Python 可以使用机器学习模型进行温度预测。常用的模型有回归分析、随机森林等。使用前需要准备足够的历史数据并进行特征工程&#xff0c;构建模型并进行训练&#xff0c;最后使用预测结果。 文章目录温度预测 回归分析导入必要的库&#xff1a;读取温度数据&#xff1a;…

Java中的插入排序和希尔排序

插入排序&&希尔排序插入排序希尔排序上一篇博客我给大家伙说了一下子堆排序,之所以我把插入排序和希尔排序放在一起呢,是因为希尔排序实际上用到了插入排序的思想,希望下面的内容能够帮助到大家.对于插入排序呢,我们可以参考抓牌顺牌,就在一般情况下,我们也不考虑什么组…

对象在Eden区分配

一、对象在Eden区分配大多数情况下&#xff0c;对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时&#xff0c;虚拟机将发起一次Minor GC。在测试之前我们先来看看 Minor GC和Full GC 有什么不同呢&#xff1f;Minor GC/Young GC&#xff1a;指发生新生代的的垃圾…

oracle11g SAP测试机归档日志暴增排查(二)

接上面一的内容&#xff0c;通过logminer可以知道是因为oracle11g设置awr快照引起的插入数据&#xff0c;所以要看这个插入是否正常。 之前也发现SYSAUX表空间也没有多少了&#xff0c;应该这个原因引起产生大量的日志 6、查找SYSAUX表空间满的原因 对于SYSAUX表空间而言&…

【博学谷学习记录】大数据课程-学习第五周总结

Hadoop概述 Hadoop介绍 Hadoop是Apache旗下的一个用java语言实现开源软件框架&#xff0c;是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。 狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它…

Gateway, Zuul, Oauth2.0, 前后端分离, 定制页面,登录回调接口的处理

由于公司与Alexa平台接入了语音控制的功能&#xff0c;需要将公司的账号与Alexa的账号进行绑定&#xff0c;所以需要账号授权的操作&#xff0c;也就是使用授权码模式。开发过程中遇到了很多坑&#xff0c;网上关于前后端分离的定制页面的介绍又很少&#xff0c;前前后后花了一…

泰拉瑞亚灾厄NPC不复活x哥布林军队入侵中断

文章首发及后续更新&#xff1a;https://mwhls.top/4415.html&#xff0c;无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评&#xff0c;非常感谢&#xff01; 目录 NPC 不复活 原因 解决办法 哥布林军队入侵中断 说…

2019-ICML-Towards Graph Pooling by Edge Contraction

2019-ICML-Towards Graph Pooling by Edge Contraction Paper: https://graphreason.github.io/papers/17.pdf Code: https://github.com/Jiajia43/pytorch_geometric 通过边收缩实现图池化 池化层可以使GNN对抽象的节点组而不是单个节点进行推理&#xff0c;从而增加其泛化潜…

MongoDB下载安装

MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。 &#xff08;摘…

音频编辑服务UI SDK接入指导及常见问题

华为 HMS Core 音频编辑服务&#xff08;Audio Editor Kit&#xff09;是华为帮助全球开发者快速构建各类应用音频能力的服务&#xff0c;汇聚了华为在音乐、语音等相关音频领域的先进技术。音频编辑服务为开发者们提供音频基础编辑、AI配音、音源分离、空间渲染、变声、多种音…