Spring核心简介

Spring简介

Spring是一个开源、轻量级框架。在诞生之初,创建Spring的主要目的是用来替代更加重量级的企业级Java技术,尤其是EJB(Enterprise JavaBean)。从最初的挑战者,到现在诸多标准的制定者;从传统的JEE应用,到大数据、NoSQL、企业应用集成、批处理、移动开发等领域,Spring都在参与和发挥影响力。

Spring的目标

Spring致力于简化企业级Java开发,促进代码的松散耦合。成功的关键在于IOC和AOP。它采取4种关键策略:

  1. 基于POJO(简单老式Java对象 Plain Old Java object)的轻量级和最小侵入性编程
    • Spring不会强迫你实现Spring规范的接口或继承Spring规范的类
    • 在基于Spring构建的应用中,它的类通常没有任何痕迹表明你使用了Spring,它依旧是POJO
  2. 通过依赖注入和面向接口实现松耦合
    • 不同的类必须以适当的方式进行交互来完成有实际意义的功能,所以耦合是必须的,但是需要谨慎管理
    • 依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己去获取依赖
  3. 基于切面和惯例进行声明式编程
    • AOP以声明的方式将服务模块化并应用到他们需要影响的组件中去,使这些组件具有高内聚性并更加关注自身业务,确保POJO的简单性。
  4. 通过切面和模板减少样板式代码
    • Spring通过模板封装来消除样板式代码(大量重复代码)

Spring容器

容器是Spring框架的核心。在Spring应用中,对象由Spring容器创建和装配,并存在容器之中 。

  1. Spring实现了多个容器,主要有两种,bean工厂(由org.springframework.beans.factory.beanFactory接口定义)和应用上下文(由org.springframework.context.ApplicationContext接口定义)。我们使用更高级的后者。
  2. Spring自带了多种类型的应用上下文,比如从文件系统下的一个或多个XML配置文件中加载上下文定义使用FileSystemXmlapplicationcontext。
  3. 创建Spring容器:ApplicationContext context
  4. 从类路径下的一个或多个XML配置文件中加载应用上下文:ApplicationContext context = new ClassPathXmlApplicationContext("example.xml");

Spring模块

在Spring 5.0 中,Spring框架的发布版本包括了21个不同的模块,每个模块会有3个JAR文件(二进制类库、源码的JAR文件以及JavaDoc的JAR文件)Spring模块根据功能划分为6类不同的功能。

  1. Spring核心容器
    容器是Spring框架最核心的部分,它管理着Spring应用中bean的创建、配置和管理。包括bean工厂和应用上下文。还包括一些企业服务,如E-mail、JNDI访问、EJB集成与调度。所有的Spring模块都构建于核心容器之上。
  2. Spring的AOP模块
    与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。
  3. 数据访问与集成
    Spring的JDBC和DAO(Data Access Object)模块抽象了样板式代码,并在多种数据库服务的错误信息之上构建了一个语义丰富的异常层。Spring的ORM模块对许多流行的ORM框架进行了集成,包括Hibernate、Java Persistence API、Java Data Object和iBATIS SQL Maps。
  4. Web与远程调用
    Spring能够与多种流行的MVC框架进行集成,同时,它的Web和远程调用模块自带了一个强大的MVC框架,有助于在Web层提升应用的松耦合水平。
  5. Instrumentation
    Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能,使用场景非常有限。
  6. 测试
    Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的 mock对象实现。对于集成测试,该模块为加载Spring应用上下文中的bean集合以及与Spring上下文中的bean进行交互提供了支持。

参考书籍

《Spring IN ACTION》

上一篇:实现输出h264直播流的rtmp服务器 flash直播服务器【转】


下一篇:Heap:Expedition(POJ 2431)