初识Spring
Spring是java平台一个轻量级的解决方案,也就是说它是非侵入式的,即你的业务逻辑本身对spring框架没有依赖。但是spring也可以作为一站式的企业级解决方案,从最核心的依赖注入,到事务管理、AOP、ORM、web、消息、远程调用等都具有相应的模块,它被设计为模块化的,我们只需要选用我们需要的那些模块即可。
依赖注入和控制反转
Spring的核心是依赖注入(DI)和控制反转(IOC),其实两者说的是一个意思。任何一个应用程序都由多个组件(类和对象)相互协作而正常提供服务,相互协作的组件之间存在相互的调用关系,此谓之依赖。
依赖的存在导致应用程序不容易被扩展。因此解耦成了设计中一个极为重要的方面。但是依赖总是存在的,spring设计了一种统一的模式,它通过容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(ConstructorInjection)。
和以往相比,spring是容器负责依赖的注入,而不是传统的具体调用者负责依赖的注入,此之谓控制反转。
Spring模块
Spring的核心是IOC容器,但它实际上包含20多个模块,这些模块被分为核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、AOP(AspectOriented Programming)、Instrumentation、Messaging、Test,如官方文档下图所示:
核心容器
如上图所示,核心容器包含四个模块,
其中 spring-core 和spring-beans 模块是spring framework的基础,包括控制反转和依赖注入,核心接口为BeanFactory.
spring-context构建在以上两个模块之上,并且对BeanFactory进行扩展,并提供对其他框架的集成。
spring-expression 是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性、对象方法调用等。
AOP and Instrumentation
Spring-aop提供了aspect-oriented programming的实现,允许你定义方法拦截器和切入点来更好的解耦。
Instrumentation 提供了对不同的application server集成所需的工具和类加载器。
Messaging
提供对消息的集成。
数据访问/集成
包含JDBC, ORM, OXM, JMS和Transaction.
Spring-jdbc是对java jdbc的抽象和封装。
Spring-tx提供编程或者声明式的事务管理。
Spring-orm提供对流行的orm的集成,包括jpa、hibernate等。
Spring-oxm提供抽象的object/XMLmapping,以支持如JAXB ,XMLBEAN等。
Web
主要提供与web集成的一些支持,如springMVC
test
spring的单元测试和集成测试。
结束语
本篇为spring的简单介绍,尤其是对其各个模块的介绍全部来自spring官方文档。由于本人初学spring,很多地方表述不清,欢迎指正。