一、Spring简介
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,
分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的用途可以用于服务端的开发,
还可以从简单性、可测试性和松耦合的角度来说,任何Java应用都可以从Spring中受益。Spring 的核心是面向切面编程(AOP)和控制反转 (IOC) 容器。
简单来说Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级开源框架。
二、Spring框架
Spring框架是一个分层架构,由七个良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理Bean方式,入下图所示。
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
-
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
-
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
-
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
-
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
-
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
-
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
三、控制反正(IOC)
我们先看个例子:
传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象;
而在 Spring 开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Sprin为我们提供的对象即可,这就是控制反转的思想。
实例化一个 java 对象有三种方式:使用类构造器、使用静态工厂方法、使用实例工厂方法;
当使用 spring 时我们就不需要关心通过何种方式实例化一个对象, spring 通过控制反转机制自动为我们实例化一个对象。
依赖注入(DI):Spring 使用 Java Bean 对象的 Set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。
四、面向切面编程(AOP)
在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。
而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限过滤、事务管理、调度拦截、公共参数校验、记录日志等公用操作处理的过程就是面向切面编程的思想。
在 Spring 中,所有管理的对象都是 JavaBean 对象,而 BeanFactory 和 ApplicationContext 就是 spring框架的两个 IOC 容器,现在一般使用 ApplicationContext,其不但包含了 BeanFactory 的作用,同时还进行更多的扩展。
1
代理机制 :
JDK 的动态代理:针对实现了接口的类产生代理。
Cglib 的动态代理 : 针对没有实现接口的类产生代理。应用的是底层的字节码增强的技术 生成当前类的子类对象。
2、AOP的开发中相关术语:
Joinpoint(连接点) : 所谓连接点是指那些被拦截到的点。在Spring中, 这些点指的是方法, 因为spring只支持方法类型的连接点。
Pointcut(切入点) : 所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义 。
Advice(通知/增强) : 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.。通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能)。
Introduction(引介) : 引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
Target(目标对象):代理的目标对象。
Proxy(代理):一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。
Aspect(切面) : 切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。
注:未完, 待续。