【Spring】Spring 更简单的读取和存储对象

博客主页:敲代码的布莱恩特
欢迎点赞
收藏留言 欢迎讨论!
本文由 【敲代码的布莱恩特】 原创,首发于 CSDN

由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!
精品专栏(不定时更新)
【JavaSE】 【Java数据结构】【LeetCode】
在这里插入图片描述

Spring 更简单的读取和存储对象

  • 一、将对象 储存到Spring中
    • 1. 先创建一个maven项目
    • 2. 添加Spring的核心包(引入spring-context和spring-beans框架)maven--->spring
    • 3. 配置Spring xml 文件 ---> 配置Spring组件扫描路径(所有需要存储在Spring中的对象都要放在此目录)
    • 4. 创建一个普通类,添加main【作用:方便测试】
    • 5. 使用注解实现对象储存在Spring框架
      • 为什么要这么多类注解
      • a. 类注解(5大类注解)
        • @Controller 控制器(对象储存)
        • @Service
        • @Repository
        • @Component
        • @Configuration
        • Bean对象的使用
      • b. 方法注解 @Bean
        • @Bean重命名
      • @Controller/@Service/@Repository/@Component/@Configuration的关系
  • 二、Bean的命名规则
    • Spring 是如何制作出类注解beanName的
  • 三、从Spring中获取对象
    • 1. 属性注入(@Autowired)
    • 2. Setter注入(@Autowired)
    • 3. 构造函数注入(推荐)(@Autowired)
  • 四、注入的关键字有
    • 1. @Autowired
    • 2. @Resource:另一种注入关键字
      • a. 属性注入
      • b. 使用Setter方式注入
      • c. 注意:@Resource注解不能使用在构造方法注入上
  • 五、@Autowired和@Resource的区别
  • 六、同⼀类型多个 Bean 报错处理
    • 1. 使用@Resource(name="user1") 定义。
    • 2. 使用 @Qualifier 注解定义名称。
    • 图解说明@Autowired和@Resource关于注入对象名称的问题

一、将对象 储存到Spring中

1. 先创建一个maven项目

创建maven就不再赘述了,详情见【Spring创建与使用】篇

2. 添加Spring的核心包(引入spring-context和spring-beans框架)maven—>spring

【Spring】Spring 更简单的读取和存储对象_第1张图片
【Spring】Spring 更简单的读取和存储对象_第2张图片

3. 配置Spring xml 文件 —> 配置Spring组件扫描路径(所有需要存储在Spring中的对象都要放在此目录)

在这里插入图片描述


【Spring】Spring 更简单的读取和存储对象_第3张图片

<?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.bit.service">
</content:component-scan>
</beans>

4. 创建一个普通类,添加main【作用:方便测试】

5. 使用注解实现对象储存在Spring框架

想要将对象存储在 Spring 中,有两种注解类型可以实现:

  1. 类注解:
    @Controller
    @Service
    @Repository
    @Component
    @Configuration
  2. 方法注解:@Bean

接下来我们分别来看

为什么要这么多类注解

既然功能是⼀样的,为什么需要这么多的类注解呢?

这和为什么每个省/市都有⾃⼰的⻋牌号是⼀样的?⽐如陕⻄的⻋牌号就是:陕X:XXXXXX,北京的⻋ 牌号:京X:XXXXXX,⼀样。甚⾄⼀个省不同的县区也是不同的,⽐如⻄安就是,陕A:XXXXX,咸 阳:陕B:XXXXXX,宝鸡,陕C:XXXXXX,⼀样。这样做的好处除了可以节约号码之外,更重要的作 ⽤是可以直观的标识⼀辆⻋的归属地。

那么为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类 的⽤途,⽐如:

@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层。

程序的⼯程分层,调⽤流程如下:
【Spring】Spring 更简单的读取和存储对象_第4张图片

a. 类注解(5大类注解)

注意事项:

  1. 读取存入对象的id:默认情况下就是首字母小写【Spring】Spring 更简单的读取和存储对象_第5张图片
  2. 关于储存目录【Spring】Spring 更简单的读取和存储对象_第6张图片

@Controller 控制器(对象储存)

【Spring】Spring 更简单的读取和存储对象_第7张图片

@Service

【Spring】Spring 更简单的读取和存储对象_第8张图片

@Repository

【Spring】Spring 更简单的读取和存储对象_第9张图片

@Component

【Spring】Spring 更简单的读取和存储对象_第10张图片

@Configuration

【Spring】Spring 更简单的读取和存储对象_第11张图片

Bean对象的使用

用一个main方法使用
【Spring】Spring 更简单的读取和存储对象_第12张图片

b. 方法注解 @Bean

使用方法注解@Bean将对象储存到Spring
【Spring】Spring 更简单的读取和存储对象_第13张图片

@Bean重命名

【Spring】Spring 更简单的读取和存储对象_第14张图片

@Controller/@Service/@Repository/@Component/@Configuration的关系

其实这些注解里面都有⼀个注解 @Component,说明它们本身就是属于@Component 的“子类”

【Spring】Spring 更简单的读取和存储对象_第15张图片

二、Bean的命名规则

  • 首字母和第二个字母都非大写,首字母小写来获取Bean
  • 如果首字母和第二个字母都是大写,那么直接使用原Bean名来获取Bean

Spring 是如何制作出类注解beanName的

【Spring】Spring 更简单的读取和存储对象_第16张图片

三、从Spring中获取对象

1. 属性注入(@Autowired)

【Spring】Spring 更简单的读取和存储对象_第17张图片

2. Setter注入(@Autowired)

【Spring】Spring 更简单的读取和存储对象_第18张图片
在这里插入图片描述

3. 构造函数注入(推荐)(@Autowired)

【Spring】Spring 更简单的读取和存储对象_第19张图片
注意事项1: 如果当前类里面只有一个构造方法,那么@Autowired 注解是可以被省略的(这点和Setter注入是不同的)
【Spring】Spring 更简单的读取和存储对象_第20张图片
注意事项2: 如果当前类中存在一个以上的构造方法,那么@Autowired 注解不能被省略

四、注入的关键字有

1. @Autowired

使用请看上边

2. @Resource:另一种注入关键字

使用 @Resource 注解注入
它的用法和@Autowired类似

a. 属性注入

【Spring】Spring 更简单的读取和存储对象_第21张图片

b. 使用Setter方式注入

【Spring】Spring 更简单的读取和存储对象_第22张图片

c. 注意:@Resource注解不能使用在构造方法注入上

【Spring】Spring 更简单的读取和存储对象_第23张图片

五、@Autowired和@Resource的区别

  • 1、出身不同:@Autowired 来自于 Spring,而 @Resource 来⾃于 JDK 的注解;
  • 2、作用范围不同: 使用@Autowired可以进行属性注入、Setter注入、构造器注入 ;而@Resource只能进行属性注入和Setter注入。
  • 3、功能不同:@Resource可以配合更多的属性进行使用,而@Autowired支持的属性较少,比如使用@Resource可以配合name属性进行使用,从而完成对象的别名注入。

六、同⼀类型多个 Bean 报错处理

解决同⼀个类型,多个 bean 的解决⽅案有以下两个

1. 使用@Resource(name=“user1”) 定义。

@Controller
class UserController4 {
    // 注⼊
    @Resource(name = "user1")
    private User user;
    public User getUser() {
        return user;
   }
}

2. 使用 @Qualifier 注解定义名称。

@Controller
public class UserController5 {
    // 注⼊
    @Autowired
    @Qualifier(value = "user2")
    private User user;
    public User getUser() {
        return user;
   }
}

图解说明@Autowired和@Resource关于注入对象名称的问题

【Spring】Spring 更简单的读取和存储对象_第24张图片

你可能感兴趣的:(Spring,Java,笔记,spring,java,maven)