企业框架-Spring
1.什么是Spring
Spring是最受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring框架来创建性能好、易于测试、可重用的代码。
Spring框架是一个开源的Java平台,他最初是由Rod Johnson编写的,并于2003年6月首次在Apache2.0许可下发布。
Spring是轻量级的框架
Spring框架的核心特性是可以用于开发任何Java应用程序,但是在Java EE平台上构建web应用程序时需要扩展的。
2.使用Spring框架的好处
- 基于POJO的轻量级和最小侵入性编程
- 通过依赖注入和面向接口编程实现松耦合
- 基于切面和惯例进行声明式编程
- 通过切面和模板减少样式代码
3.什么是依赖注入
Spring最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IOC)是一个通用的概念,他可以用许多不同的方式去表达,依赖注入仅仅只是控制反转的一个具体例子。那么什么是IOC?
1)IOC(Inversion of Control):这么讲吧,一个系统的运作肯定不是简单的几个类就可以实现的,它往往需要多个类的合作来实现业务逻辑。这就使得每个对象都需要与其合作的对象具有相互的关 系(依赖关系)。在早前编程中所需要的依赖对象是通过自身去创建得到的, 而现在是通过一个容器来统一管理这些依赖关系。在这整个过程中,对象获得其他对象引用的方式其实就是IOC
2)IOC的本质:控制权的转移。IoC原理是基于面向对象中的设计原则的Don't call us,we'll call you(别找我,我会来找你的)。可以这样讲,所有组件的初始化和调用都是由容器负责。在传统实现中 类之间的关系是由类自己控制的(需要使用其他类时就自己创建),但是在IoC中,组件处在容器中,由容器统一管理和调度。这就是"控制反转"的概念所在:控制权由应用代码转移到了容器中,即控 制权的转移。
3)依赖注入的本质:上面说到控制反转IOC,是一个思想概念,但是也要具体实现的,上面的配置文件也是一种实现方式。依赖注入提出了具体的思想。
4)依赖注入DI是Dependency Injection缩写,它提出了“哪些东东的控制权被反转了,被转移了?”,它也给出了答案:“依赖对象的创建获得被反转”。所谓依赖注入,就是由IoC容器在运行期间,动态 地将某种依赖关系注入到对象之中。
4.什么是面向切面编程(AOP)
面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。
1主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
2主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些 行为的时候不影响业务逻辑的代码。
官方一点的解释是这样的:
Spring 框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。有各种各样常见的很好的关 于方 面的例子,比如日志记录、声明性事务、安全性,和缓存等等。在 OOP 中模块化的关键单元是类,而在 AOP 中模块化的关键单元是方面。AOP 帮助你将横切关注点从它们所影响的对象中分离出 来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。
5.spring的体系结构
核心容器有:由spring-Beans、spring-Core、spring-Context、spring-expression和spring-context-support组成(图中的SpEL为:Spring Expression Language,即Spring表达式语言)
spring-beans:模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦,简单来说,他就是为了实例化实体对象的。
spring-Core:模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
spring-Context:context模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源 束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持Java EE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的焦 点。spring-context-support提供了对第三方库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎 (FreeMarker,JasperReports, Velocity)等。
spring-expression:模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合 及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。
依赖关系