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对象呢?


相关文章
|
6天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
6天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
55 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
28天前
|
Java Spring
|
29天前
|
安全 Java C#
Spring创建的单例对象,存在线程安全问题吗?
Spring框架提供了多种Bean作用域,包括单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)、全局会话(GlobalSession)等。单例是默认作用域,保证每个Spring容器中只有一个Bean实例;原型作用域则每次请求都会创建一个新的Bean实例;请求和会话作用域分别与HTTP请求和会话绑定,在Web应用中有效。 单例Bean在多线程环境中可能面临线程安全问题,Spring容器虽然确保Bean的创建过程是线程安全的,但Bean的使用安全性需开发者自行保证。保持Bean无状态是最简单的线程安全策略;
|
29天前
|
前端开发 Java 开发者
|
30天前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
2月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
2月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
96 0
|
1天前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
13 2
|
22天前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
27 0