一、前言:
上篇博客,我们讲了一个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 注册内容才⾏,如下图所示:
这种存入 Bean 的方式,并不是很好!
1、需要手动添加 bean 对象 到 配置文件中
2、如果 是配置文件中出现了问题,不好调试。
而现在我们不需要一个一个的在spring配置文件中添加我们要储存的Bean对象。我们直接:
你以为把扫描路径添加到配置文件中就行了吗?
不你还需要再类中添加注解——再扫描的过程中,只有添加了注解的类才能成功存储到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大类注解
上面我们用到了@Service注解,其他四个注解@Controller、@Repository也是一样的。
补充1:
既然这5大类注解的用法这么相似,那为啥还要分成5个不同的注解?统一弄成一个注解不好吗?
要解答这个问题,首先我们先要了解软件工程方面的知识
之所以讲这个 关于“软件分层” 的定义呢,就是为了 后面讲解 “为什么要有五大注解类” 做铺垫!
我们接着看
既然这5大类注解对应着软件分层中的不同层——他们各自要实现的功能是不同的。
这也就不难理解为啥要分成5大类中注解了,
补充2:
你可能还有一个疑惑:为什么?我们的 Spring 一定要有下面这个配置呢?
如果没有这个配置,意味着什么??
大家可以想象一下:
一个 Spring 项目中,我们的类可分两种类型:
1、需要 进行 控制反转的类,将类的“生命周期”交给 Spring 来管理的类。【比如:UserController】
2、不需要存入 Spring 中的 类。
假设,我们有一个大型项目,需要存入 Spring 的 类 和 不需要存入 Spring 中的类,个数占比是五五开的。
这就会存在问题了!
如果我们没有 描述 根目录 的 这一行代码,
Spring 就会去扫描 所有的类,看看这些类中有哪些。
但是!项目中 需要存入 Spring 中的类,只占 50 %。
即:Spring 要浪费一倍的时间,去排查 不需要 存入 Spring 中的类。
所以,Spring 为了 提升效率,你必须要给我指定扫描的目录。
保证该目录下,一定是需要存入 Spring中的类。
这样 Spring就只需要扫描 对应目录中的类,就可以了!
@Bean方法注解
上面我们通过5大类注解还有Bean方法实现了简单往spring中存Bean对象。那么怎样实现简单的从spring中取Bean对象呢?