Spring中简单的获取Bean对象(对象装配)

获取Bean对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注入!

对象装配(对象注入)更加简单的读取Bean(是从Spring容器中读取某个对象放到当前类里面)的实现方法有以下3种:

  1. 属性注入:最简单,日常工作见的最多的
  2. 构造方法注入
  3. Setter注入

使用这三种方法,就可以更加简单的读取Bean(从容器中读取某个对象,放到当前类里面)

  1. 属性注入:
    @RestController
    class UserController {//属性注入@Autowired //自动注入对象(更加简单的从Spring容器中获取到对象private UserService userService;@RequestWrapper("/add")public UserInfo add(String username,String password){return userService.add(username,password);}
    }
    

    优点分析:

    属性注入最大的优点就是实现简单、使用简单,只需要给变量上添加一个注解(@Autowired),就可以在不 new 对象的情况下,直接获得注入的对象了(这就是 DI 的功能和魅力所在),所以它的优点就是使用简单。

    缺点分析:

    有的编辑器idea都会提醒你:”不建议使用此方法注入“

    属性注入的缺点主要包含以下3个:

    1.功能性问题:无法注入一个不可变的对象(final修饰的对象)

    2.通用性问题:只能适用于Ioc容器

    3.设计原则问题:更容易违背单一设计原则

  2. Setter注入
    @RestController
    class UserController {//Setter注入private UserService userService;@Autowired  //Setter方法+ @Autowired注解public void setUserService(UserService userService){this.userService=userService;}@RequestWrapper("/add")public UserInfo add(String username,String password){return userService.add(username,password);}
    }

    优点分析:

    完全符合单一职责的设计原则,因为每一个 Setter 只针对一个对象

    缺点分析:

    1.不能注入不可变对象(fianl修饰的对象)

    2.注入的对象可被修改

@Resource:另一种注入关键字

在进行类注入的时候,可以使用@Autowried关键字之外,我们还可以使用@Resource进行注入

@Controller
class UserController {//注入@Resourceprivate UserService userService;public User getUser(Integer id) {return userService.getUser(id);}
}

那么,我们来看一下@Autowired和@Resource的区别吧!!

  1. 出身不同

    @Autowired来自于Spring

    @Resource来自于JDK的注解

  2. 使用时设置的参数不同

    相比于@Autowired来说,@Resource支持更多的参数设置

    列如:name,根据名称获取Bean

  3. @Autowired可以用于Setter注入,构造函数注入和属性注入,而@Resource只能用于Setter注入和属性注入,不能适用于构造函数注入
  4. @Autowired先根据类型查找(byType),之后再根据名称查找(byName);@Resource先根据名称查找,然后再根据类型查找

在Spring(容器)中找Bean有两种方式:

  1. 根据类型查找
  2. 根据名称查找

综合练习:

在 Spring 项⽬中,通过 main ⽅法获取到 Controller 类,调⽤ Controller ⾥⾯通过注⼊的⽅式调⽤ Service 类,Service 再通过注⼊的⽅式获取到 Repository 类,Repository 类⾥⾯有⼀个⽅法构建⼀ 个 User 对象,返回给 main ⽅法。Repository ⽆需连接数据库,使⽤伪代码即可。


总结:

  1.  将对象存储到 Spring 中:

    a. 使⽤类注解:@Controller、@Service、@Repository、@Configuration、@Component【它 们之间的关系】

    b. 使⽤⽅法注解:@Bean【注意事项:必须配合类注解⼀起使⽤】

  2. Bean 的命名规则:

    ⾸字⺟和第⼆个字⺟都⾮⼤写,⾸字⺟⼩写来获取 Bean,如果⾸字⺟和第⼆个 字⺟都是⼤写,那么直接使⽤原 Bean 名来获取 Bean

  3.  从 Spring 中获取对象:

    a. 属性注⼊

    b. Setter 注⼊

    c. 构造函数注⼊(推荐)

  4. 注⼊的关键字有:

    a. @Autowired

    b. @Resource

  5. @Autowired 和 @Resource 区别:

    出身不同; 使⽤时设置参数不同 @Resource ⽀持更多的参 数,⽐如 name。

  6. 解决同⼀类型多个 Bean 的报错:

    a. 使⽤ @Resource(name="")

    b. 使⽤ @Qualifier("")

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

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

相关文章

【iOS】——知乎日报第二周总结

文章目录 一、自定义cell内容乱序问题二、WKWebView加载网页三、通过cell的协议函数进入指定网页四、滚动视图左滑加载新的网页五、隐藏导航栏 一、自定义cell内容乱序问题 当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题,当我一直下拉刷新或者上滑看以…

mac电脑视频处理推荐:达芬奇DaVinci Resolve Studio 18 中文最新

DaVinci Resolve Studio 18是一款专业的视频编辑、调色和后期制作软件,由Blackmagic Design开发。它被广泛应用于电影、电视和广告等行业,提供了全面的工具和功能,使用户能够进行高质量的影片制作和后期处理。 以下是DaVinci Resolve Studio…

【QML】vscode安装QML格式化插件方法

1. 安装插件 拓展 > 搜索qml > 找到QML Format >点击安装 2. 配置 打开settings.json文件 ctl shift p,然后搜索settings 修改settings.js内容 {...//添加以下内容// 根据自己电脑安装路径来填写qmlformat.exe的路径,注意转义符"\…

数字孪生与智慧城市:开启未来智慧生活

在数字时代的浪潮中,数字孪生技术和智慧城市的理念相互交织,共同塑造了一个更智能、更可持续、更宜居的未来。数字孪生是一项前沿技术,将虚拟世界与现实世界相融合,为城市管理者和市民带来了前所未有的机遇和便捷。 数字孪生模型是…

redis集群中节点fail,noaddr

文章目录 1. 问题:fail,noaddr2. cluster nodes节点信息解读2.1 每个字段的含义2.2 flags字段各标记含义 3. redis集群fail,noaddr问题解决4. cluster指令5. 相关文章(1) redis集群搭建(2) 华为云两台机器内网互联(3) /etc/rc.d/init.d 详解|程序开机自启(4) Redis5…

使用信号管理Nginx的父子进程

Nginx是一个多进程程序,进程之间进行通讯可以使用共享内存和信号等。做进程管理时,只能使用信号。 能够接受命令的有三者: Master进程 Work进程 nginx命令行 Master进程 可以监控Worker进程发来的CHLD信号。 管理worker进程可以接受的命令&a…

树——对称二叉树

leetcode题目地址 树为空树,亦为对称二叉树树非空时,仅需判断其左右子树是否对称判断左右子树对称 (1) 左右子树是否为空,有一个为空 便不对称, 都为空或都不为空 可能对称 (2) 左右子树根节点值是否相同 (3) 判断 左子树 的 左子…

【数据结构练习题】删除有序数组中的重复项

✨博客主页:小钱编程成长记 🎈博客专栏:数据结构练习题 🎈相关博文:消失的数字 — 三种解法超详解 删除有序数组中的重复项 1.🎈题目2. 🎈解题思路3. 🎈具体代码🎇总结 1…

【机器学习】决策树与分类案例分析

决策树与分类案例分析 文章目录 决策树与分类案例分析1. 认识决策树2. 分类3. 决策树的划分依据4. 决策树API5. 案例:鸢尾花分类6. 决策树可视化7. 总结 1. 认识决策树 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最…

Python求n位的自幂数

一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。 方法1 n int(input(请输入位数:)) for num in range(10**(n-1), 10**n):if sum(map(lambda i: int(i)**n, str(num))) num:print(num)方法2 n int(input(请输入位数:)) result filter(la…

手写IOC

本篇博客我们来手写一个IOC,就是模拟出IOC里边的实现过程。这过程怎么做呢? 咱们主要基于java中的反射,再加注解,来实现spring框架中IOC的这个效果。 下面我们来具体看看这个过程。首先因为这里边要用到反射,咱们把反…

实在没货,简历(软件测试)咋写?

简历咋写,这是很多没有【软件测试实际工作经验】的同学们非常头疼的事情。 简历咋写?首先你要知道简历的作用。 简历的作用是啥呢?一句话就是:让HR小姐姐约你。 如何让HR看你一眼,便相中你的简历,实现在众…

ubuntu扩大运行内存, 防止编译卡死

首先查看交换分区大小 grep SwapTotal /proc/meminfo 1、关闭交换空间 sudo swapoff -a 2、扩充交换空间大小,count64就是64G 1G x 64 sudo dd if/dev/zero of/swapfile bs1G count64 3、设置权限 sudo chmod 600 /swapfile 4、指定交换空间对应的设备文件 …

Golang WebSocket 创建单独会话

引言 在互联网应用程序中,实时通信是一种非常重要的功能。WebSocket 是一种基于 TCP 的协议,它允许客户端和服务器之间进行双向通信。Golang 是一种高性能的编程语言,它提供了对 WebSocket 的原生支持,使得在 Golang 中创建 WebS…

ROS自学笔记十九:URDF集成Gazebo

URDF (Unified Robot Description Format) 是一个用于描述机器人模型的 XML 文件格式,通常用于机器人仿真和控制应用中。Gazebo 是一个开源的机器人仿真工具,常用于测试和开发机器人控制算法。你可以将 URDF 模型集成到 Gazebo 中,以在仿真环…

【不用开发板学习STM32】可设置电子时钟

• 实验环境 工程文件下载链接!https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247551559&idx1&sn721b9238bc58936ac41e6ad1b9988554&chksmfcfb1990cb8c9086490b11c05bc76c08da15c71caa38715a047c49d36f25a149920aee482f3e&token204641…

C++配平化学方程式,附源码。配平化学方程式的C++代码实现

化学方程式是化学反应简明的表达形式,它从“质”和“量”两个方面表达了化学反应的意义。故化学方程式的书写是我们学习化学的过程中不可或缺的一个重要环节。当我们遇到简单的化学方程式例如:2H2 O2 2H2O 时,配平则是毫无压力,…

软件测试---等价类划分(功能测试)

能对穷举场景设计测试点-----等价类划分 等价类划分 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分分类: 1)有效等价类 2)无效等价类步骤:1)明确需求 2)确定有效和无…

C语言实现输入一个字符串,递归将其逆序输出

完整代码&#xff1a; // 输入一个字符串&#xff0c;递归将其逆序输出。如输入 LIGHT&#xff0c;则输出 THGIL #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//逆序输出字符串 void func(char *str){if (*str\0){//结尾时直接退出递归…

基于MATLAB的电流、电压互感器特性的仿真分析

摘 要 电压互感器和电流互感器是电力系统中进行电能计量和继电保护的基本测量和继电保护等设备之一&#xff0c;其准确度及可靠性与电力系统的安全、可靠、经济运行密切相关。随着电力系统在监测、控制及保护等方面自动化和智能化要求的不断提高&#xff0c;传统的电磁式电压互…