Spring框架

来源:互联网 发布:江本胜水结晶实验 知乎 编辑:程序博客网 时间:2024/06/04 00:21

前言:在学习Spring框架时,发现不能的教材可能描述有所不同,可能是使用的Spring版本不一致,也可能是每个人的理解不一样,大家只要知道大概框架类型就行了,细节性的东西还是要看官方文档,这里本着学习和实用的目的,也就不做深究。

(一)Spring概念

Spring框架的核心功能适用于任何Java应用。

1、Spring框架优势

  • 能有效地组织中间层对象
  • 实现了真正意义上的面向接口编程,实现了组件之间的高度解耦
  • 易于进行单元测试
  • 为数据存取提供了一个一致的框架,简化底层数据库的访问方式。

2、依赖注入(DI,Dependency Injection)和控制反转(IOC,Inversion of Control)
在传统的程序设计中,通常由调用者来创建被调用者的实例,而在依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例的类型,创建后再注入调用者。由于Spring容器负责创建被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入;而被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,因此称为控制反转。
Spring框架通过依赖注入或控制反转的方式来管理各个对象,这种动态而灵活的方式使得各个对象之间的依赖关系和具体实现更容易被理解,也便于开发者对项目的管理。

3、面向切面编程(AOP,Aspect-Oriented Programming)
横切代码:分散在各处且与对象核心功能无关的代码。
在面向对象编程(OOP,Object-Oriented Programming)中,通过封装、继承和多态性等概念建立起了多个对象之间的层次结构。OOP擅长定义从上到下的关系,但并不适合定义从左到右的关系。横切代码的存在导致了大量的代码重复,增加了模块复用的难度。
AOP使用了横切技术,将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,称为“切面”(Aspect)。

(二)Spring框架模块

Spring框架遵从模块的架构方式,由总共20多个模块组成,包括核心容器、数据访问/继承、Web、AOP等。
这里写图片描述

1、核心容器(Core Container)
核心容器中的主要组建是BeanFactory类,它是工厂模式的实现,JavaBean的管理就由它来负责。BeanFactory类通过IoC将应用程序的配置及依赖性规范与实际的应用程序代码分离。

  • Beans和Core模块实现了Spring框架的最基本功能,规定了创建、配置和管理Bean的方式,提供了控制反转和依赖注入的特性;
  • Context模块建立在Core和Bean模块之上,该模块向Spring提供了上下文信息,它扩展了BeanFactory,添加了对国际化的支持,提供了国际化、资源加载和校验等功能,并支持与模版框架的集成;
  • Expression Language模块提供了一种强大的表达式语言来访问和操作运行时对象,改表达式语言是在JSP2.1中规定的统一表达式语言的延伸,支持设置和获取属性值、方法调用、访问数组、集合和索引、逻辑和算术运算、命名变量、根据名称从IoC容器中获取对象等功能,也支持list投影、选择和list聚合功能。

2、数据访问/集成模块(Data Access/Integration)

  • JDBC模块对JDBC程式化代码进行了抽象,提供了一个JDBC的抽象层,大幅度地减少了开发过程中对数据库操作代码的编写;
  • ORM模块为主流的对象关系映射(object-relative mapping)API(JPA、JDO、Hibernate、IBatis)提供了集成层,可以将O/R映射框架爱与Sprng提供的特性进行组合使用;
  • OXM模块为支持Object/XML映射的实现提供了一个抽象层;
  • JMS模块包含发布和订阅消息的特性;
  • Transaction模块提供了对声明式事务和编程事务的支持,这些事务类必须实现特定接口,并且对所有的POJO都适用

3、Web模块

  • Web模块提供了基本的面向Web的集成功能,如多文件上传、使用Servlet监听器初始化IoC容器和面向Web的应用上下文;
  • Servlet模块提供了Spring的Web应用的模型-视图-控制器(MVC)实现;
  • Struts模块提供了对Struts的支持,提供了一个将典型的Struts web层集成在一个Spring应用程序中的支持类;
  • Portlet模块提供了一个在Portlet环境中使用的MVC实现

4、AOP、Aspect和Instrumentation模块

  • AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,使用该模块可以定义方法拦截器和切点,将代码按功能进行分离,降低它们之间的耦合性;
  • Aspects模块提供了对AspectJ的集成支持;
  • Instrumentation模块提供了class instrumentation的支持和classloader实现,可以在特定的应用服务器上使用;

5、Test模块
Test模块支持使用JUnit和TestNG对Spring组件进行测试,它提供一致的ApplicationContexts并缓存这些上下文,它还能提供一些mock对象,使得开发者可以独立地测试代码。