Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(上)

简介: Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(上)

一、前言:

上篇博客,我们讲了一个spring core项目的大致流程:

创建项目——》将对象储存到Spring容器中 ——》从Spring容器中取出Bean对象

但是吧,上篇讲的这些流程还是太繁琐了,有没有一个更简单的方式来实现对象的存取呢?

当然有,一起来看看吧!

首先,Spring项目的创建——这个没有什么好说的!就按我们上篇博客的步骤来进行。

但注意:与上篇博客相比,spring的配置文件发生了改变——为了更简单的实现Bean对象的存入(把对象存到spring中)


更改后的spring配置文件

<?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="在对象储存中,要扫描的路径"></content:component-scan>
</beans>


二、储存Bean对象

首先我们回忆下,我们执行储存Bean对象的方式。

之前我们存储 Bean 时,需要在 spring-config 中添加⼀⾏ bean 注册内容才⾏,如下图所示:

73e81df469f9451e9ade794c9c730029.png

这种存入 Bean 的方式,并不是很好!

1、需要手动添加 bean 对象 到 配置文件中

2、如果 是配置文件中出现了问题,不好调试。


而现在我们不需要一个一个的在spring配置文件中添加我们要储存的Bean对象。我们直接:

8f29e097481b4139a47031729c8741d4.png

你以为把扫描路径添加到配置文件中就行了吗?

不你还需要再类中添加注解——再扫描的过程中,只有添加了注解的类才能成功存储到spring中

这就引起了我们注解的概念

一共有两者方法:

1、使用 5 大类注解实现

1、@Controller 【Controller - 控制器】

2、@Service 【service - 服务】

3、@Repository 【repository - 仓库】

4、@Configuration 【configuration - 配置/布局】

5、@Component 【component - 组件】

通过上述五大类注解中的任何一个,都可以将 bean 存储到 Spring 中。

2、通过 方法注解@Bean ,也可以将 一个 bean 存储到 Spring 中。


5大类注解

7b382a916ec847fb93c31d75d87e4859.png

上面我们用到了@Service注解,其他四个注解@Controller、@Repository也是一样的。


补充1:

既然这5大类注解的用法这么相似,那为啥还要分成5个不同的注解?统一弄成一个注解不好吗?

要解答这个问题,首先我们先要了解软件工程方面的知识

22336a880f7c4d71bf630fc7230f6f46.png


ec60319522b74ceab520e9e422114955.png


之所以讲这个 关于“软件分层” 的定义呢,就是为了 后面讲解 “为什么要有五大注解类” 做铺垫!

我们接着看


既然这5大类注解对应着软件分层中的不同层——他们各自要实现的功能是不同的。

这也就不难理解为啥要分成5大类中注解了,


补充2:

你可能还有一个疑惑:为什么?我们的 Spring 一定要有下面这个配置呢?

7c015c9b11bf49b3a0dd14c2d66368a2.png

如果没有这个配置,意味着什么??

大家可以想象一下:

一个 Spring 项目中,我们的类可分两种类型:

1、需要 进行 控制反转的类,将类的“生命周期”交给 Spring 来管理的类。【比如:UserController】

2、不需要存入 Spring 中的 类。


假设,我们有一个大型项目,需要存入 Spring 的 类 和 不需要存入 Spring 中的类,个数占比是五五开的。

这就会存在问题了!

如果我们没有 描述 根目录 的 这一行代码,
Spring 就会去扫描 所有的类,看看这些类中有哪些。


但是!项目中 需要存入 Spring 中的类,只占 50 %。

即:Spring 要浪费一倍的时间,去排查 不需要 存入 Spring 中的类。

所以,Spring 为了 提升效率,你必须要给我指定扫描的目录。
保证该目录下,一定是需要存入 Spring中的类。

这样 Spring就只需要扫描 对应目录中的类,就可以了!


@Bean方法注解

fc9b58fef6934a2997d5ce3662c0e73e.png

上面我们通过5大类注解还有Bean方法实现了简单往spring中存Bean对象。那么怎样实现简单的从spring中取Bean对象呢?


相关文章
|
4天前
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
21 4
|
6天前
|
Java 开发者 Spring
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
29 6
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
1天前
|
Java Spring 容器
Spring注入
Spring注入
21 13
|
9天前
|
Java 数据库连接 开发者
浅谈Spring的Bean生命周期
浅谈Spring的Bean生命周期
17 1
|
13天前
|
XML Java 数据格式
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
19 0
Bean工厂探秘:解析Spring底层工厂体系BeanFactory的神奇之道
|
13天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
23 1
|
28天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
43 0
|
2月前
|
缓存 Java Maven
Spring Boot自动配置原理
Spring Boot自动配置原理
48 0
|
1月前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
111 0