这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
Spring IOC控制反转
控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代 码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的装配和管理。
IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。
依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。
IOC的实现
● 依赖查找:DL ( Dependency Lookup ), 容器提供回调接口和上下文环境给组件。
● 依赖注入:DI (Dependency Injection),程序代码不做定位查询,这些工作由容器自 行完成。
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
Spring的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。
依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式 组织在一起,而不是以硬编码的方式耦合在一起的。
Spring框架使用依赖注入(DI)实现IoC。
Spring容器是一个超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。Spring容器管理着容器中Bean之间的依赖关系,Spring使用“依赖注入”的方式来管理Bean之间的依赖关系。使用IoC实现对象之间的解耦和。
开发工具准备
开发工具:idea2017以上
依赖管理:maven3以上
jdk:1.8以上
需要设置maven本机仓库:
第一个Spring程序
在普通三层架构的基础上,将程序修改为 Spring框架程序
举例:01-primay
导入 Jar 包
首先,导入 Spring 程序开发的四个基本 jar 包。
日志:commons.apache.org/proper/comm…
其次,导入日志相关的 Jar 包。
commons.logging.jar 该文件只是日志记录的实现规范,并没有具体的实现(相当于日志操作的接口定义)。
这里日志的实现使用 log4j,故还需要 log4j.jar。
最后,导入 JUnit 测试 Jar 包 junit-4.9.jar。
Spring 基本编程,共需 7 个 Jar 包即可。
定义接口与实体类
创建Spring配置文件
Spring配置文件的文件名可以随意,但Spring建议的名称为applicationContext.xml。文件约束在%SPRING_HOME%\docs\spring-framework-reference\html\xsd-configuration.html文件中。
注意,Spring 配置文件中使用的约束文件为 xsd 文件。若 Eclipse 中没有自动提示功能,则需要将约束要查找的域名地址指向本地的 xsd 文件。相应的 xsd 文件在 Spring 框架解压目录下的 schema 目录的相应子目录中。
约束文件:xsd(xml schema definition) xml 文档结构定义。
作用:验证 xml 文档的逻辑结构是否正确。
● 定义一个 xml 文档中都有什么元素
● 定义一个 xml 文档中都有什么属性
● 定义一个 xml 文档中元素可以有哪些子元素,以及元素的顺序。
● 定义一个 xml 文档中元素和属性的数据类型。
这里需要的是 spring-beans.xsd 约束文件,故需要在 beans 子目录中查找相应版本的约束文件。
< bean />:用于定义一个实例对象。一个实例对应一个 bean元素。
id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。
class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。
配置不能联网,本机的约束文件
先拷贝约束文件的 url 地址, 然后点击 Eclipse 的 windows 菜单下面的 Perferences
定义测试类
容器接口和实现类
1、ApplicationContext 接口(容器)
ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现类有两个。
通过 Ctrl +T 查看:
A、配置文件在类路径下
若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。
B、 配置文件在本地目录中
若 Spring 配置文件存放在本地磁盘目录中,则使用 FileSystemXmlApplicationContext 实现类进行加载。
C、 配置文件在项目根路径下
若 Spring 配置文件存放在项目的根路径下,同样使用 FileSystemXmlApplicationContext 实现类进行加载。
下面是存放在项目根路径下的情况,该配置文件与 src 目录同级,而非在 src 中。
D、ApplicationContext 容器中对象的装配时机
ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。