spring 存储对象 + 获取对象


前言

本篇在spring中如何使用五大类注释与方法注释将对象加入IOC容器中,了解如何使用注释来获取容器中的Bean对象,如有错误,请在评论区指正,让我们一起交流,共同进步!


文章目录

  • 前言
    • 1.通过注释将类加入IoC容器中
      • Maven项目创建,前提准备:
      • 添加注释 - 储存Bean对象
        • 1.类注释存储spring
        • java中的标准分层 - 写程序时根据这些分层
        • 2.方法注释存储Bean对象
    • 2. 获取Bean对象 / 对象装配
      • 属性注入
      • 构造方法注入
      • Setter注入
  • 总结

本文开始

1.通过注释将类加入IoC容器中

Maven项目创建,前提准备:

1.查看是否添加依赖成功

在这里插入图片描述

2.配置扫描路径:自定义
位置处于自己创建的.xml文件中,路径内容只需要修改自己创建的路径即可;
配置完路径:会扫描路径下的类,有注释的加入容器中;

在这里插入图片描述

添加注释 - 储存Bean对象

1.类注释存储spring

类注释的目的:看到类注释,就能了解当前类的用途;
a)@Controller:控制器存储,校验参数合法性;
b)@Service:服务存储,业务组装(方法组装),看调用什么方法,不进行业务的实现;- 告诉你办理什么业务;
c)@Repository:仓库存储(数据持久层),进行实际业务的处理 ; - 实际去办一个个业务;
d)@Component:组件存储,工具类层,通用的工具;
e)@Configuration:配置存储,配置层,对项目进行设置;

使用: - 在所创建的类上,添加对应注释即可;

在这里插入图片描述

【注】

  • Bean的命名规则:(获取加注解的默认id)对于第一个字母大写,第二个字母小写默认id使用小写 - 符合规则前两个字母小写;StudentUser => studentUser
    不满足首字母大写 && 第二个字母小写,使用原来id - 非默认情况,id为原类名不变;THead => THead

Bean的命名规则源码:

在这里插入图片描述

  • 存储Bean,可以使用注解存储,也可以使用xml,存储Bean,二者也可以混用;(类不在同一个包里,可以使用Bean的方式存储)

java中的标准分层 - 写程序时根据这些分层

在这里插入图片描述

2.方法注释存储Bean对象

【注】
1.@Bean注释,加在方法上的;
2.@Bean注释,必须配合五大类注释一起使用;

为什么需要与五大类注释配合使用呢?
方法太多,寻找一个方法,可能会扫描包下的所有方法,相比较来说类比较少,通过类找方法会快很多;

@Bean与五大类配合使用代码示例:
推荐使用@Component

在这里插入图片描述

3.获取@Bean命名方式:@Bean的默认命名 == 方法名(id == 方法名)

但是这样命名有弊端,如果方法名为getxxx(), setxxx(), 这样调用这个对象是不恰当的,所以就需要给方法重新命名;再获取Bean对象就是根据重命名来获取;

重命名@Bean方式:给@Bean添加属性,设置名称;
a)@Bean(“abc”) : 没写属性,直接命名
b)@Bean(name = “bb”) : 写属性name并设置命名
c)@Bean(value = “cc”) :写属性value并命名

【注】
① 命名可以指定多个命名 : @Bean(name = {“aa”, “bb”})
② 对@Bean重命名后,就不能使用原来的方法名来获取对象;
③ 对于类注释,不支持起多个命名;(相当于不能给一个类取多个命名)
④ 对于@Bean名称,如果多个@Bean使用相同的名称,程序不报错,在同一个类中,除第一个@Bean之后的对象不会被存放到容器中,再有相同名称的Bean存储时,容器自动忽略不存储;

如果使用@Bean重命名,命名名称一样:就需要根据加载顺序来确定,通过@Order() 来声明一个类的加载时机,@Order() 中括号中的值越大,就先加载通过那个类;
@Order(100) > @Order(1) ;

在这里插入图片描述

2. 获取Bean对象 / 对象装配

获取对象 / 对象注入:取出一个对象放到某个类中;

获取对象的注释:@Autowired 或者 @Resource

@Resource注入 作用类似 @Autowired 二者区别:
1.@Resource 来自 jdk; @Autowired 来自Spring框架;
2.支持参数个数不同:@Resource 支持多参数设置;@Autowired 只支持一个参数设置;
3.使用方式不同:@Resource 不支持构造方法注入;@Autowired 支持构造方法注入;
4.idea兼容性支持不同:@Resource 不存在报错情况;@Autowired 在专业版情况下可能报错;(解决报错方法:@Autowired(required = false) 给括号中设置false值,表明此时对象不存在也可以)

属性注入

属性注入属于:通过注释从容器中获取对象,注入到设置的变量中,在之后的方法中就能使用;

优点:属性注入,使用简单;
缺点:无法注入 final 修饰的对象;
通用性 - 只适用于 IoC容器;
【注】被final修饰的变量需要直接复制 或者 在构造方法中进行赋值;

在这里插入图片描述

问题:同一类型Bean存储到容器多个,获取Bean时出现错误;

在这里插入图片描述

解决方式:
a) 将属性的名字 和 Bean的名字对应上;

在这里插入图片描述

b) 使用@Autowried + @Qualifier()进行筛选

在这里插入图片描述

c) 使用@Resource 设置name名称指定获取某个对象;

在这里插入图片描述

构造方法注入

构造方法注入使用:在构造方法上添加@Autowired, 从容器中获取UserRepository对象注入到对应属性中;

优点:可以注入一个final修饰的对象;
注入的对象不会被修改,构造方法 只会加载一次;
构造方法注入可以保证 对象完全初始化;
构造方法通用性更好;
缺点
写法复杂;
使用构造方法注入,无法解决循环依赖的问题;

@Service
public class User4 {
    private UserRepository userRepository;
//在构造方法上添加@Autowired
    @Autowired
    public User4(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

Setter注入

setter注入使用:在setter方法上加上@Autowired, 在执行对应类时,会从容器中拿到对象,并注入到setter中的参数;

优点:符合单一设计原则 - Setter只有set一个属性
缺点:无法注入final修饰的变量;
setter注入的对象可以被修改;(setter本身可能被多次调用修改)

@Service
public class User3 {
    private UserRepository userRepository;
    //@Autowired注释setter就会从容器中获取对应对象,再注入到对应参数UserRepository属性中;
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据Flink(五十):流式计算简介

文章目录 流式计算简介 一、数据的时效性 二、流式计算和批量计算

260. 只出现一次的数字 III

题目描述: 主要思路: 首先通过抑或的方式可以将所有两个的数字全部排除,得到两个单个数字的异或值。 接下来将当前得到的异或值取最低一位的1。 分析异或值的每一位,为1的肯定是两个数中一个有一个没有。于是可以通过这一特性将两…

【Java编程案例】面向对象实现模拟物流快递系统

文章目录 一、案例目标二、案例分析1. 交通工具类2. 保养接口3. 专用运输车类4. 定位功能接口5. 快递类 三、测试类四、总结 在现代社会,网购已经成为人们生活的重要组成部分。当用户在购物网站中下订单后,订单中的货物经过一系列的流程,最终…

2023十大最牛编程语言排行榜以及各语言的优缺点

文章目录 ⭐️ 2023年7月十大编程语言排行榜⭐️ 十大值得学习编程语言概要🌟 Python🌟 C/C🌟 Java🌟 C#🌟 JavaScript🌟 Swift🌟 Ruby🌟 GO(Golang)&#x1…

ElasticSearch Window Linux部署

文章目录 一、Window 集群部署二、Linux 单节点部署三、Linux 集群部署 一、Window 集群部署 创建 elasticsearch-cluster 文件夹,在内部复制三个elasticsearch服务 修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件 # -----------------------…

ROS 2 — 托管(生命周期)节点简介

一、说明 这篇文章是关于理解ROS 2中托管(生命周期)节点的概念。我们描述了概念性的想法以及我们为什么需要它。所以让我们开始吧! 二、托管式节点 — 什么和为什么? 为了理解托管式节点,让我们从一个简单的问题陈述开…

LeetCode 918. Maximum Sum Circular Subarray【数组,动态规划】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

谷粒商城篇章5 ---- P173-P192 ---- 检索服务【分布式高级篇二】

目录 1 检索服务 1.1 搭建页面环境 1.1.1 引入依赖 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域…

Zookeeper的基本概念以及安装

Zookeeper简介 Zookeeper是一个分布式的(多台机器同时干一件事情),开源的分布式应用程序协调服务,是Google公司Chubby产品,是Hadoop和Base重要的组件,.它是一个分布式应用程序提供一致性的服务的软件,提供的功能包括:配置服务,域名服务,分布式同步,组服务等 Zookeeper目…

大数据课程C4——ZooKeeper结构运行机制

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Zookeeper的特点和节点信息; ⚪ 掌握Zookeeper的完全分布式安装 ⚪ 掌握Zookeeper的选举机制、ZAB协议、AVRO; 一、Zookeeper-简介 1. 特点…

TRT4-trt-integrate - 3 使用onnxruntime进行onnx的模型推理过程

前言: onnx是microsoft开发的一个中间格式,而onnxruntime简称ort是microsoft为onnx开发的推理引擎。允许使用onnx作为输入进行直接推理得到结果。 py接口的推理过程: main函数: if __name__ "__main__":session onn…

模拟量采集S_ITR函数(信捷C语言FC)

模拟量采集和转换函数非常简单,这里不再介绍,想了解具体算法的可以查看下面博客文章: PLC模拟量输入 模拟量转换FC S_ITR_博途模拟量转换程序_RXXW_Dor的博客-CSDN博客模拟量采集、工业现场应用特别广泛、大部分传感器的测量值和输出信号都是线型关系,所以我们可以利用线性…

JPA连接达梦数据库导致auto-ddl失效问题解决

现象: 项目使用了JPA,并且auto-ddl设置的为update,在连接达梦数据库的时候,第一次启动没有问题,但是后面重启就会报错,发现错误为重复建表,也就是说已经建好的表没有检测到,…

mysql用户添加

一、连接mysql服务 mysql -u root -p 二、查询用户表 use mysql ; SELECT User, Host FROM mysql.user; 三、新增用户并授权 Create USER dev4rw% IDENTIFIED WITH mysql_native_password BY 新密码; GRANT ALL PRIVILEGES ON *.* TO dev4rw% WITH GRANT OP…

【Spring MVC学习】连接 接收请求参数 响应返回参数

目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、ResponseBody注解&#xff1a…

【C++】开源:Redis数据库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Redis数据库配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff0c…

智能驾驶中的数据标注

目前,各大自动驾驶汽车制造商都在通过获取高质量的训练数据最大化其数据资产的投入产出比。在海量的智能驾驶数据面前,如何让每个数据都有存在意义?从《数字商业时代》对澳鹏Appen(中国)高级产品总监张童皓的采访中,你或许能找到一…

MySQL数据库远程访问权限设置

MySQL数据库远程访问权限设置 对于初学者小伙伴来说,我们安装mysql到本地服务,再用一些图形化工具链接。一般情况下我们都能链接成功;但是、在模拟真实的环境中我们的数据库不可能直接安装在本地机器上,大多数是在云服务器上&…

头戴式玩具外贸出口EN71检测报告需要什么资料?

EN71是欧盟市场玩具类产品的规范标准。儿童是全社会最关心和爱护的群体,儿童普遍喜爱的玩具市场发展迅猛,同时各类玩具由于各方面质量问题给儿童带来的伤害也时有发生,因此世界各国对本国市场上的玩具的要求正日益变得严格。许多国家都就这些…

Docker Compose容器的快速编排

Docker Compose容器的快速编排 一、Docker Compose简介1、Docker Compose是什么2、Docker Compose三大概念 二、Docker Compose 安装与操作1、环境安装2、YAML文件格式及编写注意事项3、Docker Compose配置常用字段4、Docker Compose常用命令5、Docker Compose文件结构6、删除创…