详解Spring 中 Bean 对象的存储和取出
作者:风能保暖内裤 发布时间:2023-08-06 02:42:46
由于 Spring 拥有对象的管理权,所以我们也需要拥有较为高效的对象存储和取出的手段,下面我们来分别总结一下:
存对象
配置文件
在存储对象之前,我们需要先配置一下 Spring 的扫描目录,这样 Spring 即可在正确的目录中识别出我们想要给交给 Spring 进行管理的对象
首先在项目中的 resources 目录下添加一个 xml 文件,名字可以自定义
随后在这个 xml 中添加如下代码,这段代码可以直接复制,但是要修改倒数第二行的 base-package 中的路径改成自己的路径
<?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">
<? 下面这行代码是设置 spring 的扫描目录,base-package 中的路径 可以直接设置成我们代码中的根目录 ?>
<content:component-scan base-package="dir"></content:component-scan>
</beans>
类注释
在 Spring 中我们可以通过类注释或者方法注释来进行对象的存储,其中类注释是用的比较多的,类注释总共有 5 种:
@Conntroller,业务逻辑层
@Service,服务器存储
@Repository,仓库存储,可以用来操作数据库
@Component,项目组件层
@Configuration,配置层
这五种类注释的作用都是可以直接将这个类对象储存到 Spring 中,但是却有 5 种类注释,这么做的原因是:能够让我们看到类注释就能得知这个类的大致功用
命名规则
类注释中有两套命名规则
如果当前类名中前两个字母都是大写,那么存入 Spring 中的对象名字默认是类名
否则名字为第一个字母转为小写后的类名
除了上面 5 种类注释之外,还有方法注释
方法注释
方法注释就是将注释@Bean
加到方法上方,并且必须搭配类方法使用
作用:将这个方法返回的对象存入到 Spring 中
例如
@Controller
public class Student {
@Bean
private Student getStudent() {
return new Student();
}
}
通过 @Bean 注释存入 Spring 中的对象名字默认是方法名,我们也可以直接在 @Bean 后面直接加上参数指定这个对象的名字,例如
@Controller
public class Student {
@Bean(name="sb") // 设置对象的名字
private Student getStudent() {
return new Student();
}
}
取对象
在 Spring 中,获取 Spring 中的对象也有另一种叫法:对象装配
主要有三种对象装配的方式
属性注入
我们可以直接在成员变量中添加 @Autowired 注释, @Autowired 会优先匹配 Spring 中类名相同的对象,例如下面代码中的 user,Autowired 会优先按照 user 的类型在 spring 中进行匹配
@Controller
public class Student {
@Autowired
private User user;
@Bean(name="sb")
private Student getStudent() {
return new Student();
}
}
这种注入方式很简单也很快,但是缺点不少:
可移植性差,这个用法是建立在 IoC 容器上的,移植到其他框架上可能无法使用
无法注入不可变的对象,也就是 final 修饰的对象
因为 final 修饰的变量只有两个初始化时机,第一个是直接赋值,第二个是在类的构造方法中赋值,显然这种对象注入的方式无法满足其中一个条件
由于使用简单,容易滥用,所以比较容易被违背单一设计原则(即一个类只干一件事)
setter 注入
首先创建一个要注入的对象,然后通过「右键 — generate — setter」生成一个 setter 方法,最后在这个 setter 方法头顶上添加 @Autowired 注释
@Controller
public class Student {
private User user;
@Autowired // 通过 setter 注入
public void setUser(User user) {
this.user = user;
}
}
setter 注入的缺点:
由于是 setter 方法,所以可能多次调用,这就意味着这个对象可以被多次修改
依旧无法注入 final 修饰的对象,原因同上
构造方法注入
顾名思义,这是在构造方法上添加 @Autowired 注释来注入对象,如下
@Controller
public class Student {
private User user;
@Autowired
public Student(User user) {
this.user = user;
}
}
构造方法注入的优点:
由于是构造方法,只会执行一次,所以对象不会被重复更改
可以注入 final 修饰的对象(在构造方法中赋值)
JDK本身就支持构造方法,所以有更低的门槛,说人话:具有更强的可移植性
来源:https://blog.csdn.net/weixin_63519461/article/details/127855362
猜你喜欢
- 摘要:想必大家做开发的时候都会用到下拉刷新的控件,现在各种第三方的下拉刷新控件不胜枚举。当然最NB的还是XListView。其他也有针对Gr
- 上篇介绍了几种图表的公共组件X、Y轴、背景Board的绘制。这章节介绍柱状图表的绘制,相对其它图表而言简单一些,这里主要介绍图表主体的绘制,
- 1. 什么是对象池对象池,顾名思义就是一定数量的已经创建好的对象(Object)的集合。当需要创建对象时,先在池子中获取,如果池子中没有符合
- 一,FileWritter写入文件FileWritter, 字符流写入字符到文件。默认情况下,它会使用新的内容取代所有现有的内容,然而,当指
- 一、项目要求实现一个通讯录通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:添加联系人信息删除指定
- 如何高效地进行数组复制?如果把一个变量值复制给另外一个数组变量,那么2个变量指向托管堆上同一个引用。如果想在托管堆上创建另外的一份数组实例,
- 本文实例讲述了Android编程基于自定义View实现绚丽的圆形进度条功能。分享给大家供大家参考,具体如下:本文包含两个组件,首先上效果图:
- 背景在接口请求过程中,传递json对象,springboot转换为实体VO对象后,所有属性都为null。post请求:后台接收请求:当时就懵
- 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来
- 实现“摇一摇”功能,其实很简单,就是检测手机的重力感应,具体实现代码如下:1、在 AndroidManifest.xml 中添加操作权限2、
- Android Studio 打包 jar 及 aar 包创建工程 New -> Module -> Library在gradl
- Step1: 安装JDK并配置环境变量;Step2: 安装Gradle进入点击打开链接官网首页点击install gra
- 报错翻译: compileSdkVersion android-24”需要JDK 1.8或更高版本编译。报错现象如下图:原因:st
- Android手势解锁本文讲述的是一个手势解锁的库,可以定制显示隐藏宫格点、路径、并且带有小九宫格显示图,和震动!让你学会使用这个简单,高效
- 1 简介Solace是一个强大的实时性的事件驱动消息队列。本文将介绍如何在Spring中使用,虽然代码使用的是Spring Boot,但并没
- 虽然说模块通信、路由协议在Android已经不新鲜了,但是如果脱离了那些优秀的开源库我们从零开始自己造一个库,有时候重复造轮子会让自己对所谓
- 可以静态绑定数据源,这样就自动为DataGridView控件添加 相应的行。假如需要动态为DataGridView控件添加新行,方法有很多种
- 其他的不多说了!我们来看看效果吧 一、实现方式一:直接引入compile方式A
- 一、问题描述今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建androi
- android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来