Spring学习(1)-了解spring的各个模块
本文目录
1.Spring简介
Spring 被称为 J2EE 的春天,是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为两大核心。
Spring 框架通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
Spring 框架不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。
Spring使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。
Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。
Spring 的发展历程
1997 年 IBM提出了EJB 的思想
1998 年,SUN制定开发标准规范 EJB1.0
1999 年,EJB1.1 发布
2001 年,EJB2.0 发布
2003 年,EJB2.1 发布
2006 年,EJB3.0 发布
Rod Johnson ( spring 之父)
Expert One-to-One J2EE Design and Development(2002)
阐述了 J2EE 使用EJB 开发设计的优点及解决方案
Expert One-to-One J2EE Development without EJB(2004)
阐述了 J2EE 开发不使用 EJB的解决方式(Spring 雏形)
2017 年 9 9 月份发布了 g spring 的最新版本 0 spring 5.0 通用版( GA
2.Spring的优势
-
方便解耦,简化开发
通过 Spring提供的 IoC容器,可以将对象间的依赖关系交由 Spring进行控制,避免硬编码所造成的过度程序耦合。
简单来说,Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。 -
AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。 -
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。提高开发效率和质量。 -
方便程序的测试
Spring 支持 JUnit框架,可以通过注解方便地测试 Spring 程序。 -
方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。 -
降低 JavaEE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。 -
Java 源码是经典学习范例
Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java 设计模式灵活运用以及对 Java技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。 -
不断快速更新迭代
Spring仍在不断完善自己,面向更好的春天。
3.Spring的核心模块(体系结构)
1.Spring Framework下载地址
官网:http://spring.io/
下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring
笔者学习使用的是 spring5.0.2 。
特别说明:
spring5 版本是用 jdk8 编写的,所以要求我们的 jdk 版本是 8 及以上。
同时 tomcat 的版本要求 8.5 及以上。
2.Spring Framework的模块图
2.1 Core Container(核心容器)
Spring 的核心容器是其他模块建立的基础,由 Beans
模块、Core
核心模块、Context
上下文模块和 Expression Language
表达式语言模块组成,具体介绍如下:
- Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
- Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和DI功能。
- Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
- Spring Expression Language(SpEL)模块:是运行时查询和操作对象图的强大的表达式语言。
2.2 Data Access/Integration(数据访问/集成)
数据访问/集成层包括 JDBC
、ORM
、OXM
、JMS
和 Transactions
模块,具体介绍如下。
- JDBC 模块:提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。
- ORM 模块:对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。
- OXM 模块:提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。
- JMS 模块:指 Java 消息服务,包含的功能为生产和消费的信息。
- Transactions 事务模块(tx包):支持编程和声明式事务管理实现特殊接口类,并面向所有的 POJO——JavaBeans(简单的实体类)。
2.3 Web 模块
Spring 的 Web 层包括 Web
、Servlet
、Struts
和 Portlet
组件,具体介绍如下。
- Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。
- Servlet模块(web包):包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
- Struts 模块(web包):包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。
- Portlet 模块:提供了在 Portlet 环境中使用 MVC实现,类似 Web-Servlet 模块的功能。
2.4 Spring AOP 简介
如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用。
AOP即 Aspect Oriented Program 面向切面编程
首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
- 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
- 所谓的周边功能,比如性能统计,日志,事务管理等等
周边功能在 Spring 的面向切面编程AOP思想里,即被定义为切面
在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP
AOP
的目的
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
AOP
当中的概念
- 切入点(Pointcut)
在哪些类,哪些方法上切入(where) - 通知(Advice)
在方法执行的什么实际(**when:**方法前/方法后/方法前后)做什么(**what:**增强的功能) - 切面(Aspect)
切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强! - 织入(Weaving)
把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)
2.5 Spring Aspects 模块
提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。
2.6 Instrumentation 模块
提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
spring-instrument.jar:Spring3.0对服务器的代理接口。
spring-instrument-tomcat .jar:Spring3.0对Tomcat的连接池的集成
2.7 Messaging 模块
spring-messaging模块为集成messaging api和消息协议提供支持
2.8 Test 模块
支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。
每个模块都可以在Spring Framework找到相应的包,很多包需要依赖其他包才能运作。
参考文章
Spring学习(1)——快速入门
spring-jar包详解整理
Spring体系结构详解
推荐阅读
- Spring学习(1)-了解spring的各个模块.
- Spring学习(2)-程序间耦合和工厂模式解耦.
- Spring学习(3)-spring核心思想IOC(控制反转)和DI(依赖注入).
- Spring学习(4)-spring IOC中bean标签,常用属性,注入方法.
- Spring学习(5)-spring Bean的作用范围和生命周期.
- Spring学习(6)-spring简单例子.
欢迎点赞评论,指出不足,笔者由衷感谢o!