【SSM】Spring 系列——Spring 概述、第一个 Spring 程序、容器接口和实现类
01 Spring 概述
1.1Spring 框架是什么
Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。spring 的核心是控制反转(IOC)和面向切面编程(AOP)。Spring 是可以在 Java SE/EE 中使用的轻量级开源框架。
Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring 中说明对象(模块)的关系。
Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。
1.2Spring 官网
Spring 官网有 Spring 家族技术的介绍,有相应框架的 jar 包和文档,还有源码文件,必要的时候可以参考。
1.3Spring 的优点
Spring 是一个框架,是一个半成品的软件。
有 20 个模块组成。
Spring 是存储对象的容器,不装文本和数字,装的是对象,用来管理对象。
1.3.1 轻量
Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。
Spring 核心功能的所需的 jar 总共在 3M 左右。
Spring 框架运行占用的资源少,运行效率高。不依赖其他 jar。
1.3.2 针对接口编程,解耦合
Spring 提供了 Ioc 控制反转,由容器管理对象,对象的依赖关系。
原来在程序代码中的对象创建方式,现在由容器完成。
对象之间的依赖解耦合。
1.3.3 AOP 编程的支持
将公共的、通用的、重复的代码单独开发,在需要的时候反织回去。底层的原理是动态代理。
通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付,在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
1.3.4 方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,相反 Spring 可以降低各种框架的使用难度,Spring 提供了对各种优秀框架(如 Struts2,Hibernate、MyBatis)等的直接支持。简化框架的使用。
Spring 像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪个框架,就把这个插头放入插线板。不需要可以轻易的移除。
1.4Spring 体系结构
Spring 由 20 多个模块组成,它们可以分为
数据访问/集成(Data Access/Integration)
Web
面向切面编程(AOP, Aspects)
提供 JVM 的代理(Instrumentation)
消息发送(Messaging)
核心容器(Core Container)
测试(Test)
02 IoC 控制反转
控制反转 IoC(Inversion of Control) 是一个概念,是一种思想。
指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。
控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值, 依赖的管理。
IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入。应用广泛。
依赖:
classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA 对 classB 有依赖。
Ioc 的实现:
依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成。
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持对象之间依赖关系的管理。
Spring 框架使用依赖注入(DI)实现 IoC。
Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。
Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。
使用 IoC 实现对象之间的解耦和。
2.1 基于 XML 的 DI
2.1.1 开发工具准备
开发工具: idea2020.1
依赖管理: maven3.6.3
jdk: 1.8 及以上
2.1.2 设置 maven 的本地仓库
2.2 Spring 的第一个程序
实现步骤如下:
1.1.1 创建 maven 项目
2.2.1 引入 maven 依赖 pom.xml
2.2.2 定义实体类
2.2.3 创建 Spring 的配置文件
在 src/main/resources/目录现创建一个 xml 文件,文件名可以随意,但 Spring 建议的名称为 applicationContext.xml。
spring 配置中需要加入约束文件才能正常使用,约束文件是 xsd 扩展名。
<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。
id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依赖关系也是通过 id 属性关联的。
class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。
2.2.4 创建测试类
2.2.5 使用 Spring 创建非自定义的类
spring 配置文件加入 java.util.Date 定义:
MyTest 测试类中:
调用 getBean(“myDate”); 获取日期类对象。
2.3 容器接口和实现类
2.3.1ApplicationContext 接口(容器)
ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容器”的角色。其实现类有两个。
(1)配置文件在类路径下
若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现类进行加载。
(2)ApplicationContext 容器中对象的装配时机
ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。Spring 初始化对象时要使用无参的构造方法,切记保证类中有无参构造方法。
(3)使用 spring 容器创建的 java 对象
版权声明: 本文为 InfoQ 作者【胖虎不秃头】的原创文章。
原文链接:【http://xie.infoq.cn/article/2623b6a1f069c50e0fb2a74a8】。文章转载请联系作者。
评论