免费网站alexa排名查询,梅兰商贸网站开发设计简介,宁波工业设计最好的公司,企业网站建设方法通过上一章的Spring#xff0c;我们基本实现了Spring 的读取与存储#xff0c;但是在操作过程中#xff0c;读取与存储并没有那么得“简单” 一套流程还是很复杂#xff0c;所以#xff0c;本章来介绍更加简单得读取与存储。
在 Spring 中想要更简单的存储和读取对象的核…通过上一章的Spring我们基本实现了Spring 的读取与存储但是在操作过程中读取与存储并没有那么得“简单” 一套流程还是很复杂所以本章来介绍更加简单得读取与存储。
在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解也就是我们接下来要学习 Spring 中的相关注解来存储和读取 Bean。
更简单的存 之前我们存储 Bean 时需要在 spring-config 中添加⼀⾏ bean 注册内容才⾏ 我们现在可以通过写一行注解就代替一行 配置。
配置扫描路径
如果这缺少了这个前置工作那么整个项目的操作都操作不起来。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contenthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://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.xsdcontent:component-scan base-packagecom.java.Repository/content:component-scan/beans 这个扫描路径就是去扫描 该路径底下是否加了 “五大” 注解一经发现注解就给他添加到 Spring容器 中。 如果不是在该扫描路径底下即使是加了扫描路径也不会加入到Spring 中。 所以这个配置的扫描路径需要格外注意不能太大太大就会导致项目启动的很慢太小又会导致添加不到。 添加注解存储 Bean 对象 想要将对象存储在 Spring 中有两种注解类型可以实现 类注解Controller、Service、Repository、Component、Configuration。 ⽅法注解Bean。
举个栗子 通过这个 注解就可以 将对象存储到 Spring 中
当然存储的前提是 路径配置正确。
其他的四个注解也一样这里就不一一举例了。
看看结果 这里首字母小写不完全正确到获取的 部分再来讲解。
为什么要这么多类注解 就是让程序员看到类注解之后就能直接了解当前类 的⽤途⽐如 Controller表示的是业务逻辑层 Servie服务层 Repository持久层 Configuration配置层 程序的⼯程分层调⽤流程如下 类注解之间的关系 我们通过查看源码可以知道 查看 Controller / Service / Repository / Configuration 等注解的源码发现 其实这些注解⾥⾯都有⼀个注解 Component说明它们本身就是属于 Component 的“⼦类”。 Bean注解 除了五大类注解还可以通过 Bean 注解这个Bean 注解不是类注解而是方法注解 我来看看单单只有一个 Bean 注解是无法注入进 容器中 Bean 在使用的前提是必须配合五大类注解才可以生效 更简单的取
这个取主要就是针对这个 Bean 来取
上述过程中这个通过默认名去取的会产生问题 现在这个方法名叫做 UUUU 我们再来使用刚刚首字母小写的方式看看能不能拿到 我们发现它找不到这个 对象了。为啥呢
我们来看看Bean生成名称的源码 我们可以发现如果是首字母和第二个字母都大写的话 需要直接返回它的原名。
当然我们在Bean 注解之后还可以加上名字 获取 Bean 对象 获取 bean 对象也叫做对象装配是把对象取出来放到某个类中有时候也叫对象注⼊ 对象装配对象注⼊的实现⽅法以下 3 种 属性注⼊ 构造⽅法注⼊ Setter 注⼊ 接下来我们分别来看 属性注入
举个例子 在Users 类中添加了 user1 的方法返回值是User。 最终是可以获取到User对象。 解释这里将 Users 这个类注入到了 Spring 容器中并且还将 user1 这个方法注入到了容器中它返回的对象 是 User 这个类。 所以可以在后续拿到 User 对象。怎么拿的就是通过 Autowrid 这个注解这就是属性注入。
假设我们给他再次注入一个 User 对象至容器中看看还能不能再次属性注入成功 反而还报错容器中注入了 两个 返回对象为 User 的它并不知道你具体需要哪个。
我们大致可以推测 Spring 容器存储Bean 对象的逻辑 Bean 对象注意事项
如果多个Bean 对象使用相同的名称那么程序就会报错但是第一个 Bean 对象之后的对象不会被放到容器中也就是只有在第一次创建Bean 对象的时候会将对称和 Bean 名称关联起来后续在有相同的名称的 Bean 存储的时候容器会自动忽略。
那么要如何来拿到呢
我们有如下几种方法
方法一在容器中存储不以默认的名字为主给他手动添加一个 名字此后就用手动添加的名字 方法二使用 Qualifier 这个注解指定 需要找的User 对象 属性注入的特点 优点 使用简单直接就可以通过 Autowried 注入 缺点 无法注入 final 修饰的类final 的特征要么直接复制要么在构造方法中赋值通用性问题只能适用于 IoC容器如果是非 IoC 容器只有在使用时才会报 空指针异常。更容易违背单一设计原则因为使用起来比较方便 Setter 注入
Setter 注入不过就是将 之前的属性改成了一个 set 方法 Setter注入的特点 优点 通常 Setter 只 Set 一个属性所以 Setter 注入 更加符合单一设计原则 缺点 Setter 注入 的对象可以被修改setter 本来就是一个方法既然时一个方法那么就可能被多次调用和修改 构造方法注入
构造方法注入是 Spring 4.0 之后推荐的注入方法 构造方法注入的特点 优点 可以注入一个final 修饰的变量注入的对象不会被修改因为 构造方法只加载一次构造方法注入可以保证诸如对象完全初始化构造方法注入通用性更好 缺点 写法比属性注入复杂使用构造方法注入无法解决循环依赖的问题这里涉及到 Spring 三级缓存以后再说 Resource 另一种关键字
除了 Autowired 还有一个 注解 我们可以看到它来自于 Java 拓展类
并且它不能作用在构造方法上 Autowired 和 Resource 的区别
出身不同Autowired 来⾃于 Spring⽽ Resource 来⾃于 JDK 的注解使⽤时设置的参数不同相⽐于 Autowired 来说Resource ⽀持更多的参数设置例如name 设置根据名称获取 Bean。Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊⽽ Resource 只能⽤于 Setter 注⼊和属性注⼊不能⽤于构造函数注⼊
总结
1. 将对象存储到 Spring 中
a. 使⽤类注解Controller、Service、Repository、Configuration、Component【它们之间的关系】b. 使⽤⽅法注解Bean【注意事项必须配合类注解⼀起使⽤】
2. Bean 的命名规则
⾸字⺟和第⼆个字⺟都⾮⼤写⾸字⺟⼩写来获取 Bean如果⾸字⺟和第⼆个字⺟都是⼤写那么直接使⽤原 Bean 名来获取 Bean。
3. 从 Spring 中获取对象
a. 属性注⼊b. Setter 注⼊c. 构造函数注⼊推荐
4. 注⼊的关键字有
a. Autowiredb. Resource
5. Autowired 和 Resource 区别
出身不同 使⽤时设置参数不同 Resource ⽀持更多的参数⽐如 name