Spring框架是一个创建并管理bean(类)的容器;使用反射技术来创建bean的实例,设计模式上使用工程模式(BeanFactory)。Spring容器默认按照单例的方式来创建bean,可以通过设置< bean>节点中的scope属性来设置为每次获取时创建不同的实例 <bean scope="prototype/>
1. Spring的体系结构组成?
Spring由核心容器(Core Container)、AOP(Aspect Oriented Programming)、数据访问及集成(Data Access/Integratioin)、Web、Test等模块组成。
核心容器:由spring-beans, spring-core, spring-context和spring-expression 4个模块组成。
- spring-core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
- spring-beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
- spring-context:给spring提供一个运行时环境,用以保存各个对象的状态。
- spring-expression:spring表达式语言。
AOP模块
- spring-aop:是 Spring 的另一个核心模块,提供了一个符合 AOP 要求的面向切面的编程实现。以动态代理技术为基础,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。
- spring-aspects:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。
数据访问及集成
- spring-jdbc:提供了一个JDBC的抽象层, 用于简化JDBC。主要是提供 JDBC 模板方式、 关系数据库对象化方式, 主要实现类是 JdbcTemplate、 SimpleJdbcTemplate。
- spring-tx:事务控制,通过它的AOP配置,可以灵活的配置在任何一层,但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。
- spring-orm:对象关系映射,集成orm框架,主要集成Hibernate、Java Persistence API(JPA)和Java Data Object(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略。
- spring-oxm:对象xml映射,OXM是Object to XML Mapping的缩写,例如:jaxb, castor xmlbeans,JiBx,XStream等。
- spring-tx 模块:事务模块,支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。
Web
spring-web:提供最基础的web支持,主要建立在核心容器上,通过Servlet或者Listener来初始化IOC容器,也包括一些与Web相关的支持。
spring-webmvc:实现了Spring MVC的Web应用
spring-websocket:Spring4.0以后新增的模块,实现双工异步通讯协议,实现了WebSocket和SocketJS,提供Socket通信和web端的推送功能。
Test
- spring-test 模块主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。
2. Spring有哪些优势?
-
方便解耦,简化开发
通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,降低了程序之间的耦合度。 -
AOP编程的支持
通过 Spring 的 AOP 功能,方便进行面向切面的编程,实现了传统OOP不能实现的功能。 -
声明式事务的支持
通过声明式方式灵活的进行事务的管理,提高开发效率和质量。 -
方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。 -
方便集成各种优秀框架
Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Quartz等)的直接支持。 -
降低 JavaEE API 的使用难度
Spring 对 JavaEE API(如 JDBC、JavaMail等)进行了封装,使这些 API 的使用难度大为降低。