• 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)
  • 相关阅读:
    腾讯之困,QQ与微信各有各的烦恼
    Attribute(一)——提前定义特性
    假设有来生
    codeforces248(div1) B Nanami&#39;s Digital Board
    驳斥苹果“诊断后门论”,声援扎德尔斯基
    python批量下载色影无忌和蜂鸟的图片 爬虫小应用
    建筑建模学习笔记2——3DMax房屋框架建模
    【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战
    javaObject类
    java基本类型和String之间的转换
  • 原文地址:https://www.cnblogs.com/hkdpp/p/10495848.html
Copyright © 2020-2023  润新知