Spring框架

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

简单来说,Spring是一个轻量级控制反转IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoCJNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑系统服务(例如审计(auditing)和事务transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

特点:

方便解耦,简化开发

通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

◆AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

声明式事务的支持

Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。

方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,HibernateHessianQuartz)等的直接支持。

降低Java EE API的使用难度

Spring对很多难用的Java EE API(如JDBCJavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

◆Java 源码是经典学习范例

Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

 

Spring是一个轻量级IoCAOP容器框架

  • 轻量级:程序的实现不是很复杂,而且占用的资源比较少,非侵入式
  • IoC Inversion Of Control):控制反转, 对象如何得到它的协作对象的责任反转。

 对象生命周期的管理

  • AOP Aspect Oriented Programming 是一种编程的方式,可以更加容易地扩展系统的功能.

 程序中重复代码问题,使得业务代码与非业务代码的解耦。

  • 容器: 可以容纳对象,并且控制对象的生命周期
  • 框架:将业务操作中一些重复性的, 通用性的代码进行了封装,搭建了一个除业务流程外的程序代码的架子,提高开发效率,将开发人员的开发重点放在业务上。减少一些其他共通性代码开发时发生错误的可能。

 

Spring的系统架构

 

spring 7大组成模块:

1:spring core:提供了spring 的核心功能,BeanFactoryspring核心容器的主要组件,

它通过Ioc把程序的配置和依赖性与实际的代码分开,是整个spring的基础

2:spring context:通过配置文件向spring提供上下文信息,它构建在BeanFactory之上,另外增加了国际化和资源访问等功能

3: spring aop:提供了面向方面编程的功能

4: spring dao:提供了一个简单有效的JDBC应用

5:spring ormspring除了有自己的JDBC以外还提供了对其他ORM框架的支持,如Hibernate; 都可以和spring进行良好的结合

6:spring web:提供了简化的处理多部分请求以及把请求参数绑定到域的任务。

7:spring MVC:提供了MVC2模式的实现,也可以和struts良好的集成在一起。

  这七大模块可以单独使用,不需要其他模块的支持

 

SpringIoC

IoC称之为控制反转,从实现上分为2

 DI ( Dependency Injection ) 依赖注入

SL( Service Locator ) 服务定位器

  • Spring使用DI方式实现控制反转。
  • 依赖注入的方式,从实现上来将,分为3

 Interface Injection( 接口注入 ) 侵入性

l 容器运行时,目标对象实现特定的接口,然后容器通过接口将关联对象注入到目标对象中

 Setter Injection( 属性set方法注入 )

容器运行时,通过类属性的set方法将关联对象注入到目标对象中

 Constructor Injection( 构造方法注入 )

l 容器运行时,将关联对象通过目标对象的构造方法注入进去。

  • Spring框架支持Stter注入,构造注入,不支持接口注入
  • 为了简化开发人员的配置项目,可以使用自动装配功能

 自动装配功能对于简单类型不起作用(字符串,基本类型,日期类型)

 常用的自动装配类型

l byName

l byType

l default

  • Spring框架管理对象的生命周期

 构造方法

l BeanFactory(用到的时候)& ApplicationContext(解析配置文件的时候)

延迟加载(lazy-init

l 创建对象的方式(单例创建,原型创建(多例创建)

 初始化方法(init-method

 销毁方法(destroy-method

Spring框架在web系统中的应用

 监听器:在服务器启动时,读取配置文件,然后解析并创建核心对象,然后保存在application范围中。

 Web应用的初始化参数

 在程序中使用工具类直接获取spring框架的核心对象。

Spring框架在Struts2框架的集成

 集成的插件jar

 集成的方式:

l Action对象由Struts2框架创建,Service对象由Spring创建,自动装配方式采用struts2框架提供的

l Action对象和Service对象都是由Spring框架创建。自动装配方式采用spring框架提供的

l 对象工厂自己维护,那么需要设置拦截器,将关联对象组合到当前的业务对象中。

 集成原理(重点)

Spring框架读取资源配置文件

 在配置文件中可以使用类似于EL表达式的语法访问资源文件的内容。

Spring框架配置连接池

 DBCP

 C3P0

Spring框架和hibernate框架的集成

 hibernate核心对象委托给Spring创建

 DAO对象需要使用Spring提供的支持类。

  • Spring框架和hibernate框架,Struts2框架的集成

SpringAOP

  • 需要记住相关的术语
  • Spring默认不支持AOP功能。所以如果使用,需要拷贝相关组件的jar包以及相关的配置
  • 配置AOP功能,最重要的就是切入点表达式声明正确。
  • AOP可以采用JDK的动态代理(基于接口)或CGLIB代理(基于继承)实现
  • AOP配置事务,事务边界应该设置service层。
  • 事务的AOP标签使用Spring自己提供的。
  • 事务的传播行为和事务的隔离级别
  • Spring框架事务的回滚策略为非受控异常。如果想要改变回滚策略,需要配置回滚的相关属性。

Spring的注解

  • 简化配置信息
  • 如果需要使用注解,必须使用特定的标签。<context:component-scan base-package=""/>

通过扫描的方式查找所有增加了注解的类。

Spring框架提供了分层注解

 控制层@Controller

 服务层(逻辑层)@Service

 持久层@Repository

 自动装配(资源配置)@Resource

 创建对象的方式@Scope("prototype ")

Spring的总结

Spring的优点

 轻量级的容器框架,没有侵入性

 IOC更加容易组合对象之间的关系。

 AOP可以更加容易的扩展业务的功能。遵循开发原则。

 Spring能消除在许多工程中常见的对Singleton的过多使用。

 Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。

 Spring能够帮助我们真正意义上实现针对接口编程。

 使用Spring构建的应用程序易于单元测试。

 Spring支持JDBCO/R Mapping产品(Hibernate)

 Spring能使用AOP提供声明性事务管理。

 提供了JavaMail或其他邮件系统的支持。

 集成其他的不同Web框架。

Spring的缺点

 简单的使用没有问题,但是在实际工作中,会增加业务操作的复杂度。

 程序测试起来不容易。

 业务功能依赖于Spring特有的功能,虽然从代码上没有侵入性,但是一旦脱离了Spring环境,业务无法执行。

Spring的竞争者

  • Google Guice (IOC)
  • AspectJ (AOP)
posted @ 2019-03-08 14:54  土豆Z120553  阅读(188)  评论(0编辑  收藏  举报