- Sping是什么
- Spring主要模块
- IOC
- DI依赖注入的三种方式
- AOP
- 术语
Sping是什么
Spring是一个轻量级的开源框架,主要作用是为了简化开发,它以IOC(控制反转)和AOP(面向切面编程)为内核
Spring主要模块
我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发
1.核心容器(Spring Core
):提供Spring框架的基本功能
,以bean的方式组织和管理Java应用中的各个组件及其关系。
2.应用上下文(Spring Context
):实现了ApplicationContext接口
,拓展了核心容器,提供事件处理、国际化等功能。
3.Spring面向切面编程(Spring AOP
):提供切面支持
,是个轻量级的容器。通过使用Spring AOP,可以将声明性事务管理集成在应用程序中。
4.JDBC和DAO模块(Spring DAO
):提供对JDBC的支持,还提供了DAO的支持,提供事务支持
。
5.对象实体映射(Spring ORM
):指对象实体映射。Spring插入了若干个ORM框架,提供了ORM对象的关系工具
。
6.Web模块(Spring Web
):拓展了Spring上下文,提供Web应用上下文,对Web开发提供功能上的支持
。
7.MVC模块(Spring Web MVC
):是一个全功能的MVC实现,通过策略接口,编程高度可配置
。
IOC
控制反转IoC(Inversion of Control),是一种设计思想
,DI(依赖注入)是实现IoC的一种方法
,也有人认为DI只是IoC的另一种说法
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中
,程序使用时再从Ioc容器中取出需要的对象
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)
举个例子,姐姐结婚,需要筹备婚礼的各种事宜,比如选购婚纱、订婚宴、找化妆师等等。在没有使用IOC
的时候,这些事情需要你亲自去处理
。但是当你开始使用IOC
的时候,你就可以委托一个婚庆公司
来帮助你处理婚礼筹备的事务,你只需要告诉婚庆公司你的需求和预算,他们会负责为你安排婚纱、宴会预定、化妆师等等,你不再需要亲自去处理每一个细节,而是将控制权交给了婚庆公司。
其中,婚庆公司就是一个IOC容器。它接管了婚礼筹备的过程,你只需要告诉它需求,它就会为你安排。同样的,在我们开发当中,IOC容器也可以帮助我们管理对象的创建和依赖关系。我们只需要告诉IOC容器我们需要的对象和依赖
,它会负责创建和注入这些对象
,我们无需自己控制每一个细节。这样,就简化了开发过程
,降低了耦合性
,也提高了代码的可测试性和可维护性
,我们也可以专注于业务逻辑的实现
,从而提高开发效率
。
DI依赖注入的三种方式
所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程
(将依赖关系注入到对象中)
在上述例子中,姐姐结婚需要化妆师吧,而化妆师就是一个依赖,在没有使用依赖注入的情况下,你需要自己去找一个化妆师,当你使用依赖注入时,你只需要将你需要化妆师告诉婚庆公司,然后婚庆公司会选择一个合适的化妆师,将这个化妆师实例注入到婚礼筹备的流程中
spring的依赖注入有3种方式
- set注入
- 通过
setXxx()方法注入Bean的属性值或依赖对象
,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式
- 通过
- 构造器注入
- 构造函数注入是除属性注入之外的另一种常用的注入方式,它
保证一些必要的属性在Bean实例化时就得到设置
(construct是bean生命周期的第一步,实例化bean),并且确保了Bean实例在实例化后就可以使用
- 构造函数注入是除属性注入之外的另一种常用的注入方式,它
- 自动装配
- 依赖注入的本质就是装配——自动装配:spring可以使用
xml和注解来进行自动装配
。自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成,自动装配就是为了将依赖注入“自动化”的一个简化配置的操作
- 依赖注入的本质就是装配——自动装配:spring可以使用
AOP
AOP(Aspect Oriented Programming)意为:面向切面编程
,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离
,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
举个例子,姐姐结婚,你希望在姐姐结婚的过程中,能够自动触发一些特定的行为,比如发送祝福短信、安排婚礼摄影师等,这个时候,我们就可以使用AOP来实现。
我们可以定义一个安排婚礼摄影师的切面,里面有相关的方法,我们可以将这个切面与姐姐结婚的业务逻辑代码进行织入,从而实现在姐姐结婚的时候自动安排婚礼摄影师的功能。如此,无论是新增或修改什么东西,我们只需要修改对应的切面,而不需要修改姐姐结婚的业务逻辑代码。这样就实现了横向关注点的分离
,通过将通用的横切关注点(如发送祝福短信、安排婚礼摄影师)从姐姐结婚的业务逻辑中抽离
出来,通过AOP框架实现与业务逻辑的织入,从而实现对姐姐结婚过程的增强,提高了代码的可维护性和可扩展性
术语
横切关注点
:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …切面
(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。通知
(Advice):切面必须要完成的工作。即,它是类中的一个方法。目标
(Target):被通知对象。代理
(Proxy):向目标对象应用通知之后创建的对象。切入点
(PointCut):切面通知 执行的 “地点”的定义。连接点
(JointPoint):与切入点匹配的执行点。