Spring 简介
Spring是一个主流的Java Web开发框架。实际上,Spring不仅能用于Java EE,也能用于Java SE。
Spring是一个分层的Java SE/EE full-stack(一站式)轻量级开源框架。它以Ioc(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切片编程)为内核,使用基本的JavaBean来完成以前只能由EJB(Enterprise Java Beans)完成的工作,取代了EJB臃肿、低效的开发模式。
Spring致力于JavaEE应用各层的解决方案,是企业应用一站式开发很好的选择,在表现层它提供了Spring MVC以及整合Struts的功能,在业务逻辑层可以管理事务、记录日志等,在持久层可以整合Hibernate、Mybatis等框架。虽然Spring贯穿表现层、业务逻辑层、持久层,但Spring并不是要取代那些已有的优秀框架,而是可以高度开放的与其它优秀框架无缝整合。
Spring的优点
1、非侵入式设计
Spring是一种非侵入式(no-invasive)框架,它可以使应用程序代码对框架的依赖最小化。
2、方便解耦、简化开发
Spring是一个大工厂,可以将所有 对象的创建、依赖关系的维护 交给Spring容器管理,大大降低了组建之间的耦合。
3、支持AOP
允许将一些通用任务,比如安全、事务、日志等,进行集中式管理,从而提高程序的复用性。
4、支持声明式事务处理
通过配置就可以完成对事务的管理,无需手动编程。
5、方便整合其它优秀框架
Spring可以与大多数框架无缝整合。
6、测试方便
Spring支持Junit4,可通过注解测试程序,很方便。
7、降低了使用JavaEE API的难度
Spring对JavaEE开发中难用的一些API进行了封装,降低了这些API的使用难度。
Spring的体系结构
1、Test模块
提供对应用的单元测试、集成测试的支持
2、Core Container(核心容器)
Spring核心容器是其它模块的基础,主要由5个模块组成:
- Beans模块:提供BeanFactory,是工厂模式的经典实现,Spring将管理的对象称为Bean。
- Core 核心模块:是Spring框架的基本组成部分,提供Ioc、DI功能。
- Context 上下文模块:建立在Beans、Core模块的基础上,可以通过它来访问任何对象的定义、配置。Context模块最重要的是ApplicationContext接口。
- Context-support 模块:提供Spring对嵌入第三方库的支持,比如要嵌入缓存(Jcache、EhCache)、邮件服务(JavaMail)、任务调度(CommonJ、Quartz)这些第三方功能,就要用到此模块。
- SpEL模块:提供对Spring Expression Language的支持。
3、
- AOP模块:提供对面向切片编程的支持,允许定义方法拦截器和切入点,将代码按照功能分离,以降低耦合。
- Aspects模块:提供对整合Aspects框架的支持,Aspects是一个优秀的AOP(面向切片编程)框架。
- Instrumentation模块:提供对类工具、类加载器的支持/实现。
- Messaging模块:提供了对消息传递体系的支持。
4、Data Access/Integration(数据访问/集成)
- JDBC模块:是JDBC的抽象,大幅减少了对数据库的编码。
- ORM模块:封装了大量的对象关系映射的API,提供对JPA、JDO、Hibernate的整合支持。
- OXM模块:提供了一个支持对象/XML映射的抽象层实现,比如XMLBeans、XStream。
- JMS模块:提供对消息传递服务的支持。
- Transactions 事务模块:提供对POJO编程、声明式事务管理的支持。
5、Web
- WebSocket模块:提供WebScoket、SockJS的实现,以及对STOMP的支持
- Servlet模块:也称为Spring-webmvc模块,包含了Spring的MVC。
- Web模块:提供基本的Web开发集成特性,比如多文件上传功能、使用Servlet监听器来初始化Ioc容器以及Web应用上下文。
- Portlet模块:提供了对在Portlet环境中使用MVC的支持。
Spring中的Bean
Spring容器负责创建、管理Bean的实例,所有的类都可以作为Bean。
传统的JavaBean一般是作为DTO(数据传输对象),用来封装值对象,在各层之间传递数据。Spring Bean可以是任何组件,用途广泛。
传统的JavaBean要求为每一个成员变量提添加setter、getter方法。Spring Bean则无此要求,但尽量为Bean写一个无参的构造函数(不强制)。
相关文章