欢迎光临散文网 会员登陆 & 注册

Java三十八篇:回顾Spring

2023-03-13 23:53 作者:小刘Java之路  | 我要投稿

大家好!我是小刘,Java程序员对spring家族在熟悉不过了,吃饭的家伙呀!

可以说是spring把Java推上了又一波Java高峰。

一、Spring介绍

在日常开发过程中经常会提到三大框架(SSM)指的是Spring、SpringMVC、Mybatis。其中一个非常重要的框架就是Spring。Spring目前隶属于皮沃托公司,Spring在刚刚出来的时候只有Spring Framework一款产品。我们习惯性的简称它为Spring,但是发展到现在Spring旗下已经有非常非常多的框架了,例如:SpringBoot、SpringCloud、SpringData、SpringSecurity等等。但是我们还是习惯性成将Spring Framework成为Spring。

二、Spring到底是什么框架

Spring它并不想Mybatis专门去解决某一个层面的问题,它在项目成扮演的是一个管理者的角色,负责对我们的项目中的对象进行管理,包括创建、注入、代理等等。实现了一个解耦的目的。Spring在管理对象时会将对象存储起来,所以Spring我们也可以将它看成一个容器。

Spring的能力

https://spring.io/projects/spring-boot  官网

Spring的生态

覆盖了:

web开发

数据访问

安全控制

分布式

消息服务

移动开发

批处理

三、Spring的两大核心能力

IOC (控制反转)

IoC inversion of control 控制反转,对于依赖的管理由调用方转移到Spring的容器中。

DI  dependency injection 依赖注入,强调属性的注入。

IoC与DI是同一件事情的两种描述方式

UserController   ->  UserService

Before userService是由UserController创建并管理

After  userService是由Spring容器创建并管理


IOC

使用Spring首先要引入依赖,Spirng框架下有很多依赖。在使用maven下载依赖时,只需要通过顶端依赖spring-context开始就可以下载到其他所有的依赖。

准备工作:

新建maven普通java项目

在pom.xml中通过spring-context的坐标下载spring的相关依赖:

Spring容器类型:

容器的顶端是ApplicationContext,在它下面有三个常用的实现类。

ClassPathXmlApplicationContext:通过配置在classpath下的一个xml文件来完成容器初始化。

AnnotationConfigApplicationContext:通过扫描注解初始化容器

WebApplicationContext:在WEB环境下使用的Spring容器

FileSystemApplication:通过外部XML文件完成容器的初始化

配置版的IOC

初始化容器的API:

配置版的IOC是用过一个XML文件描述bean信息。

1.在项目的resources目录下新建一个xml文件,名为applicationContext.xml,该文件就是spring的核心配置文件,Spring会解析该文件获得必要信息,然后进行IOC的工作。

2.在applicationContext.xml中添加beans根标签,并且在benas标签中添加一个xml的schema约束(类似于DTD)。

3.通过配置创建对象

  • 通过无参构造创建对象(Spring默认的方式,也是最常用的方式)如下:

  • 选择构造方法创建对象

当我们的类具备多种构造函数时,我们可以通过spring选择某一个构造函数来完成对象的创建,具体的方式就是通过bean标签下的constructor-arg标签来完成配置。例如:

按照上述方式配置,最终spring会选择双参构造方法来完成对象的创建。

  • 通过工厂模式创建对象

首先通过一个bean标签创建一个工厂对象(工厂类自己编写)

通过bean标签调用工厂对象的工厂方法来创建目标对象


  • 通过静态工厂模式创建对象

通过bean标签class的值为工厂的类路径,再通过静态工厂方法的方法名来完成对象的创建

4.设置对象的单例或非单例

通过spring创建对象时,可以选择使用单例或者是非单例模式。spring默认情况是创建对象采用的是单例模式。

要配置单例或者多例需要使用bean标签中的scope属性。

scope属性可选值:

singleton(默认):单例

prototype:多例

request:web环境中生效,在一次请求中无论你getBean多少次,获取的对象都是同一个

session:web环境中生效,在一次会话中无论你geyBean多少次,获取的对象都是同一个

image.png

5.通过配置完成依赖注入

  • 注入基本数据类型

在需要注入属性的对象的bean标签下,通过property子标签完成依赖注入,name表示需要注入值的属性的名称,value需要注入的值。

相对应的需要类中为属性提供set方法,因为配置方式进行依赖注入是同set方法完成赋值的。

image.png
  • 注入对象

在需要注入属性的对象的bean标签下,通过property子标签完成依赖注入,name表示需要注入值的属性的名称,ref表示要注入的对象在spring容器中的ID。

同样的在被注入的类中需要定义相应的属性并提供set方法

image.png
  • 注入集合

  • 注入键值对

  • 注入Properties

注解版的IOC

注解版的IOC所使用的容器为:AnnotationConifgApplicationContext

使用注解创建对象:

使用注解创建对象可选的注解共4个:@Component、@Controller、@Service、@Repository

@Component:通用注解,可以添加在任意类的上面用于创建该类的对象。

@Controller:专用于创建控制层的对象

@Service:专用于创建业务层的对象

@Repository:专用于创建数据层的对象

使用注解完成对象创建的基本步骤

使用注解完成依赖注入共两个注解@Resource和@Autowired

@Resource:(java 提供的注解)在注入对象时优先从容器中注入一个和属性名称相同的对象。如果和这个属性名称相同的对象和属性类型不匹配将会报错。如果在容器中没有找到和这个属性名称相同的对象,再通过类型进行注入。ByName->ByType

@Autowired:(spring提供的注解)注入对象时优先通过类型去查找,如果同一个类型的对象在容器中有多个,它会在通过属性名称完成查找,如果在这个多个对象中有和它的属性名称相同的对象,就将该对象注入过去。如果这些对象和属性名称都不匹配,就抛出异常。


Java三十八篇:回顾Spring的评论 (共 条)

分享到微博请遵守国家法律