Spring概述

Spring框架的核心模块包括IOC、AOP、数据访问、WEB及远程操作等,实现了依赖注入、面向切面编程、统一的数据访问层及Web应用支持。Spring4.0基于java6.0,全面支持java8.0,提供了丰富的功能和对最新Java特性的支持。

Spring框架结构

IOC

Spring核心模块实现了IOC功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IOC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory接口是Spring框架的核心接口,它实现了容器很多核心的功能。

Context模块构建于核心模块之上,拓展了BeanFactory功能,添加了i18n国际化、Bean声明周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务支持,如邮件服务,任务调度,JNDI获取、EJB集成、远程访问等。ApplicationContext是Context模块的核心接口。

表达式语言是统一表达语言的一个拓展,该表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法,操作数组、集合等。此外模块还提供了逻辑表达式运算、变量定义等功能,可以方便的通过表达式串和Spring IOC容器进行交互。

AOP

AOP是继OOP之后,对编程设计思想影响极大的技术之一,AOP是进行横切逻辑编程的思想,它开拓了考虑问题的思路,在AOP模块里,Spring提供了满足AOP的规范,还整合了AspectJ这种AOP语言级的框架,在Spring里实现AOP编程有众多选择,java5.0引入java.lang.instrument,允许在JVM启动时启动一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现AOP功能。

数据访问和集成

任何应用程序的核心问题是对数据的访问和操作。数据有多种表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据访问技术(如数据表的访问可以直接通过JDBC、也可以通过hibernate或MyBatis)。
首先,Spring站在DAO的抽象层面,建立了一套面向DAO层的统一异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spring通过模板化技术对各种数据访问技术进行了薄层封装,将模式化的代码隐藏起来。使数据访问的程序得到大幅简化。这样Spring就建立起了和数据形式及访问技术无关的统一DAO层,借助AOP技术,Spring提供了声明式事务。

WEB及远程操作

该模块建立在Application Context模块之上,提供了WEB应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器中。该模块还提供了多项面对Web的功能,如透明化文件上传、velocity、FreeMarker、XSLT的支持。

WEB及远程访问

Spring自己提供了一个完整的类似于Struts的MVC框架,称为SpringMVC,据说Spring之所以也提供了一个MVC框架,是因为想证实实现MVC是一项简单的工作。如果你不想使用SpringMVC的话,那么Spring对于Struts、WebWork等MVC框架的整合,一定可以给你带来方便。相对于Servlet的MVC,Spring在简化Portlet的开发上也做了很多工作。

WebSocket

WebSocket提供了一个在Web应用中高效双向的通信,需要考虑到客户端和服务器之间的高频和低延时消息交换,一般的应用场景有在线交易、游戏、协作、数据可视化等。此外,Spring在远程访问和Web Service上提供了对很多注明框架的整合,由于Spring框架的拓展性,特别是随着Spring框架影响性的扩大,越来越多的框架主动支持Spring框架,使得Spring框架应用的涵盖面越来越广。

** Spring对java版本的要求**
Spring4.0基于java6.0,全面支持java8.0,运行Spring4.0必须使用java6.0及以上版本。推荐使用java8.0及以上版本。如果要编译Spring4.0,必须使用java8.0。

java8.0的Lambda表达式
Spring代码里面有很多函数接口,因此Lambda表达式可以很容易与Spring结合使用,
java8.0的时间与日期API
在java.time中引入了一系列有用的新类,如LocalDate、LocalTime和LocalDateTime等Spring有一个数据转换框架,它可以使字符串和java数据类型相互转换。
重复注解支持
目前Spring4.0仅支持,对注解@Scheduled和@PropertySource的重复。例如可以在一个类中使用多个@PropertySource注解加载不同的资源配置文件。
空指针终结者Optional<>
java.lang.NullPointerException是最常见也是最令人讨厌的一种异常,如果一个对象肯能为null,在调用其方法之前,就必须进行排空检查,否则就会引发NullPointerException,但是很多对象永远不会为null,如果能把那些可能为空的对象标识出来,只对null嫌疑者进行判断,岂不是即可避免NullPointerException又可以避免不必要的非空判断?java8.0的java.util.Optional就是为此而生的,他明确表示开发者那些对象是需要非空检查的。

核心容器增强

泛型依赖注入
泛型依赖注入

Map依赖注入
Map依赖注入

@Lazy延迟依赖注入
@Lazy延迟依赖注入
也可以把@Lazy,放在@Autowire之上,即依赖注入也是延时的,当调用userService时才会注入,同样适用于@Bean

List注入
List注入
使用@Order可以实现排序:
排序

@Conditional注解
@Conditional注解类似于@Profile,一般用于在多个环境(开发环境、测试环境、正式环境)中进行配置切换,即通过某个配置来开启某个环境,@Conditional的注解优点是允许自己定义规则。

CGLIB代理类增强
基于CGLIB的代理类不再要求类必须有空参构造器,这是一个很好的特性。

支持用Groovy定义Bean

Web的增强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值