spring源码分析-01-概述

1.1、spring 设计伊始

    spring是为了解决企业级应用开发的复杂性而设计的,它可以做很多事情。但归根到底支撑spring的仅仅是少许基本理论。而所有的这些基本理念都可以追溯到一个最根本的使命:简化开发。

   而spring立志于简化java开发,对此他采用了四个关键策略:

   1):基于pojo的轻量级和最小侵入性编程;

    2):通过依赖注入和面向接口的松耦合;

    3):基于切面和惯性进行声明式的编程;

    4):通过切面和模板减少样板式代码;

     简而言之:主要通过面向bean,依赖注入以及面向切面这三种方式来达成。

1.2、面向bean

     spring 是面向bean的编程(Bean Oriented Programming,BOP)bean在spring中才是真正的主角。Bean在spring的作用就想Object对OOP的意义一样,spring中没有Bean也就没有spring存在的意思。spring提供了IOC容器通过配置文件或者注解的方式来管理对象之间的依赖关系。

      控制反转:(其中最常见的方式叫做依赖注入(Dependency In Jection,DI),还有一种方式叫做依赖查找(Dependency Lookup,DL),他是在c++,php,.net上应用是最早的。但依赖查询使用频率过低,不久就被移除了。)所以在spring中控制反转也被称为依赖注入,它的基本概念:不创建对象,但是描述创建他们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述那一个逐渐需要那一项服务。容器(在spring框架中是IOC容器)负责讲这些联系在一起。

      在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将他们连接在一起,决定什么时间去调用。

1.3、依赖注入

       Spring 设计的核心org.springframework.beans包(架构核心是org.springframework.core包),她的设计目标是与javaBean组件一起使用。这个包通常不是有用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,他是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory也可以管理对象之间的关系。

       BeanFactory 支持两个对象模型

        1):单例:模型提供了具有特定名称的对象的共享实例,可以在查询时对起进行检索。Singleton是磨人的也是最常用的对象模型。对于无状态服务对象很理想。

        2):原型:模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型最适合。

        bean工厂的概念是Spring作为IOC容器的基础。IOC浙江处理事情的责任从应用程序代码转移到框架。

1.4、面向切面 

        面向切面编程,aop,是一种编程思想,它允许程序员对横切关注点或者横切典型的职责分界线的行为(例如日志和事物管理)进行模块化。aop的核心构造时切面,它将那些影响多个类的行为封装到可重用的模块中。

        aop和ioc是补充性的技术,他们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日子记录语句放在所有方法和java类中才能实现日志功能。在aop方式中,可以反过来讲日志服务模块化,并以声明的方式将他们应用到需要日志的组件上。当然,优势就是java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用spring aop先写的应用代码是松耦合的。

     aop的功能完全集成到了spring事物管理,日志和其他各种特性的上下文中。

2、俯瞰Spring架构设计

         如果你想加入spring源码的学习,笔者的建议是从spring-core入手,其次是spring-beans和spring-aop,随后是spring-context,再其次是spring-tx和spring-orm,最后是spring-web和其他部分。

2.1、常用的设计模式  

      代理模式:1)、事情必须做,而自己没有时间做或者不想做 2)、持有被代理对象的应用

       静态代理、动态代理、jdk动态代理、CGLib动态代理

     工厂模式:保证从系统启动到系统停止,全过程只会产生一个实例。

     委派模式:类似于中介的功能(委托机制);只有被委托人的引用。

     策略模式 过程不同,但是结果一样

     原型模式: 过程相同,但是结果不一样。或者叫模板模式                                

2.2、spring体系结构

Springçä½ç³»ç»æ

图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

1、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 事务模块:支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。

2、web 模块

   Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件,具体介绍如下。

  • Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。
  • Servlet模块:包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
  • Struts 模块:包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。
  • Portlet 模块:提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。

3. Core Container(核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。

  • Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
  • Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。
  • Context 上下文模块:建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
  • Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。

4. 其他模块

Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块,具体介绍如下。

  • AOP 模块:提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
  • Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
  • Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
  • Test 模块:支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值