一、Spring 文件配置
使用Spring 最基本需要几个基本的jar包
使用maven加载到本地仓库
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
简单的实现第一个Spring基本部署
第一
先建一个普通的maven 项目 在pom.xml 中下载上诉提到的maven
检测旁边的maven 是否成功导入
第二
在java中建一个普通的User类
这里 用了 lombok 来代替了 get set 和构造 方法 并且重写了 一个toString , 没有lombok插件的需要手动写入方法。
第三
配置 Spring的xml 配置文件
这个文件需要你在resources资源包中创建
使用IDEA
他会自动的帮你创建好 关于Spring的配置文件
如果需要手动创建的话 就先创建一个xml文件 然后将 以下的配置信息输入进去
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
这段配置是 关于bean注入的规范 有了这一些规范 我们就可以在xml实现简单的bean注入了
这样就完成了一个Spring的基本部署
二、Spring Bean注入
在实现注入前需要了解 IOC模式(控制反转)是一个什么东西
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度
看一下官方的解释
IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分离。 其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码
按我解释来讲就是 ioc是将程序的主动性由内部转移至外部 由用户操作而不是靠程序员修改,就是不用在修改需求而是增加需求。
ioc 其实就是一个帮助用户管理的一个容器 用户只需选择自己所需要的对象 ioc就会自动 帮助实例化
但是要注意的是ioc并不是一个具体的类而是一种设计模式
注意:这上面代码只是简单的说明了IOC的主要思想 并不是真正的IOC。
Spring IOC
接口
org.springframework.context.ApplicationContext
代表 Spring IoC 容器,并负责实例化,配置和组装上述 bean。容器通过读取配置元数据来获取有关要实例化,配置和组装哪些对象的指令。配置元数据以 XML,Java 注解或 Java 代码表示。它使您能够表达组成应用程序的对象以及这些对象之间的丰富相互依赖关系。
在Spring中 我们对象的实例化 是由Spring配置文件的bean注入对象信息 到IOC容器中装配 然后又由IOC指令进行实例化
这样就完成了一个简单的Spring
这个是bean 标签的所有属性 其中constructor arguments和properties 是两种不同的注入方式 前者是构造注入 后者是set注入 ,前者要求实体类拥有有参构造 后者是要求拥有set方法。
autowiring 是自动装配 这个是针对实体类中的属性存在另外一个实体类类型
这样用 普通set注入是无法很方便进行注入 再注入的同时也是需要将实体类实例化后进行注入
因此我需要将像这种 address地址类 也弄一个bean
也就是相当于 setAdress(new Address("厦门" , "X804154") );
当然Spring也通过另外一种方法进行注入 就是通过 自动装配
主要的自动装配就是主要通过 id或者是类型
通过自动装配 实体类属性就可以不用写 <property> 就可以实现注入
byName是通过id 只上面实体类的id会和类名字相同就可以匹配到
而byType就通过类型进行自动装配 而不是通过byName 最大的优点就可以就同时bean 两种相同的类型但不同名字的对象
而byType 的优点 就是可以通过 类型 快速装配 不用去定义id 或是name
还有一个比较重点的bean 属性 就是scope
其中最要的两个属性就是
singleton 和 prototype 一个是单例模式 一个是原形模式
单例模式 就是当你从容器中 第一次getBean()实例化对象时 他就会把对象存入到缓存中 下次再次使用 容器的getBean()获取同一个对象时
就不会通过容器实例化而是直接从缓存中取得 在debug可以明显看到两次取的对象的地址是相同。
而原形模式就是将缓存取消 每次执行都是新创建一个对象 不再是从缓存中拿取。
单例模式 官方文档图
原形模式 官方文档图