Spring介绍
一 spring 概述
spring 是 一个java应用平台,提供了整合其他基础框架的能力,让java程序员更专注于java应用程序的开发。
spring 提供了pojo方式的构建服务应用,能够有效的防止非法入侵pojo,这种开发方式广泛应用于java SE 编程模型和部分的java EE开发。
使用spring受益举例:
可以通过java方法执行数据库事务,而不用处理操作事物API;
使本地java方法成为远程过程,而不必处理远程API;
使本地java方法成为管理操作,而不必处理JMX API;
二 spring 依赖注入 和 控制反转 概述
我们开发一个java应用程序,从最外层到内嵌的服务层的应用,甚至是n层服务层应用,都是java对象相互协作形成,这种对象在Java应用中相互协作都是需要相互依赖;因此spring提供了spring容器来管理对象之间的依赖关系(Dependency injection),其目的是为了解耦,实现一种组合关系。
Spring框架控制反转(Inversion of Control)通过提供一种形式化的方法来将不同的组件组成一个可以正常使用的应用程序,解决了java程序块无法连接成一个整体的问题;我们换句话来讲就是,spring IOC容器 负责对象的创建,组合,配置,连接,管理对象的生命周期,然后通过依赖注入(DI)的方式实现了将java组件连接成一个完整的java应用。
圈重点:DI 是spring 容器 管理java应用中对象的依赖关系;IOC是spring IOC容器管理对象的生命周期,通过DI实现将java组件连接成一个完整的应用。
二 spring模块(moduels)
spring框架大约有20多个模块组成,主要有 Core Container
,Data Access/Integration
,Web
,AOP (Aspect Oriented Programming)
,Instrumentation
,Messaging
,Test
,组成,具体看下图:
2.1 Core Container
Core Container 由 spring-core
, spring-beans
, spring-context
, spring-context-support
, 和 spring-expression
(Spring Expression Language) 模块组成;
spring-core
和 spring-beans
模块是spring框架最基础的功能(BeanFactory),提供了依赖注入和控制反转。BeanFactory实现了复杂的工厂设计模式,消除了原本程序中的单例模式的需求,从逻辑程序中分离了依赖关系和配置,实现了解耦。
spring-context
是基于spring-core
和 spring-beans
的基础上的一种实现;其类似于JNDI注册器,提供了一种框架式的分格访问对象。context 继承 了 Bean 的特性 ,提供了广泛的拓展:国际化支持,事件传播,资源加载,对context创建的透明化支持;同时context也支持一些J2EE的一些特性,比如EJB,JMX和基础的远程处理。ApplicationContext
是context的核心。
spring-context-support
提供了一些第三方库的支持,比如 caching (EhCache, Guava, JCache), meil (JavaMail) , schedualing(Quartz) , template (FreeMarker)
spring-expression
提供了 强大的表达式语言,在程序运行期间查询和操纵对象。其是JSP2.1规范定义的unified expression language的拓展。该语言支持属性的设置和获得,属性的分配,方法的调用,进入数组上下文,集合的索引,逻辑和算数运算符,变量命名,以及通过ioc容器通过名称检索对象。也支持list的投影和选择,一般的list聚合。
2.2 AOP 和 Instrumentation
spring-aop
提供了一种AOP联盟标准的面向切面编程的实现,比如可以让你定义拦截器和切点,实现代码的解耦合;利用source-level 的元数据功能 ,将行为信息合并到你的代码,这有点类似.NET的attributes.
spring-aspects
提供了完整的 AspectJ 支持;
spring-instrument
提供了 class instrumentation 支持 和 classloader 实现 能够使其应用于某一应用服务器。
2.3 Messaging
Spring Framework 4包含一个Spring-messaging模块,该模块具有来自Spring Integration项目的key abstractions,例如Message,MessageChannel,MessageHandler等,它们充当基于消息的应用程序的基础。 该模块还包括一组注释,用于将消息映射到方法,类似于基于Spring MVC注释的编程模型。
2.4 Data Access/Integration
The Data Access/Integration
由 JDBC, ORM, OXM, JMS, 和 Transaction 模块组成.
spring-jdbc
提供了jdbc的抽象层,消除了jdbc冗余的编码和解析数据库厂商特有的错误代码。
spring-tx
支持编程和声明式事物管理,这些事物类实现了特有的接口适用于POJO。
spring-orm
对流行的关系映射API提供了完整的支持,比如 ibatis, jpa , hibernate 等。可以使用 O/R-mapping 和 spring提供的特色,比如前面提到的事物管理。
spring-oxm
提供 Object/XML mapping 抽象层的支持,这些实现 比如 JAXB, Castor, XMLBeans, JiBX 和 XStream.
spring-jms
(Java messaging service) 包含 生产和消费消息.
2.5 Web
The Web 由 spring-web, spring-webmvc, spring-websocket, and spring-webmvc-portlet 模块组成.
spring-web
模块提供基本的面向Web的集成功能,例如分段文件上传功能以及使用Servlet侦听器和面向Web的应用程序上下文对IoC容器进行初始化。 它还包含HTTP客户端以及Spring远程支持的Web相关部分。
spring-webmvc 包含 model-view-controller (MVC) 和 rest web 服务 实现 web 应用;Spring MVC框架在domain 模型代码和Web表单之间提供了清晰的分隔,并与Spring框架的所有其他功能集成在一起。
spring-webmvc-portlet
( Web-Portlet )提供了 Portlet 环境 的 MVC 的实现 。
2.6 test
spring-test 支持 JUnit 或者TestNG 测试;其能够加载ApplicationContexts 或者 上下文的caching ,而且提供 mock objects 能够单独的测试你的代码;
三 spring包结构组成
经过 第二部分的描述 我们看看spring框架的包结构组成:
四 公众号
spring的介绍和模块组成有利我们理解spring的实现架构,有利于我们后续学习不再是很迷茫,学知识要有体系?,懂原理。?