一、源码分析 Spring 之Spring 概述

Spring 概述

Spring 是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java企业版本) 开发应用框架,集成了很多设计模式(工厂设计模式、代理设计模式等),是一个轻量级框架(低污染)。降低了类和类之间的耦合,具有解耦和的作用,可以对对象、框架进行管理,其目的是用于简化企业级应用程序开发

在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,这就需要有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。

可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,又要额外的管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。

Spring 框架主要就是来完成这个功能,Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能管理最头疼的数据库事务,本身提供了一套简单的 JDBC 访问实现,提供与第三方数据访问框架集成(如 Hibernate、JPA),与各种 Java EE 技术整合(如 Java Mail、任务调度等等),提供一套自己的 web 层框架 Spring MVC、而且还能非常简单的与第三方 web 框架集成。

从这里我们可以认为 Spring 是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是 JAVA SE(C/S 架构)应用程序还是 JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。

Spring核心功能模块

image

  1. Core Container(核心容器):Beans,Core,Context,Expression Language
  2. Spring的另一个核心:AOP,Aspects,Instrumentation
  3. Date Access/Integration(Spring对DAO层的支持):JDBC,ORM,OXM,JMS,Transactions——spring对jdbc做了封装;事务处理
  4. Web(Spring对MVC的支持):Web,Servlet,Portlet,Struts
  5. Test(Spring对测试的支持)

Spring 为简化开发采取的策略

Spring 是为解决企业级应用开发的复杂性而设计的,她可以做很多事。但归根到底支撑Spring的仅仅是少许的基本理念,而所有地这些的基本理念都能可以追溯到一个最根本的使命: 简化开发。这是一个郑重的承诺,其实许多框架都声称在某些方面做了简化。而Spring则立志于全方面的简化Java开发。对此,她主要采取了 4 个关键策略:

  1. 基于 POJO 的轻量级和最小侵入性编程;
  2. 通过依赖注入和面向接口松耦合;
  3. 基于切面进行声明式编程;
  4. 通过切面和模板减少样板式代码;
    而他主要是通过:面向 Bean、依赖注入以及面向切面这三种方式来达成的。

一、面向 Bean

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

控制反转(Inverse of Control,IOC)——其中最常见的方式叫做依赖注入(Dependency Injection,DI),还有一种方式叫依赖查找(Dependency Lookup,DL),她在 C++、Java、PHP 以及 .net 中都有运用。在最早的 Spring 中是包含有依赖注入方法和依赖查询的,但因为依赖查询使用频率过低,不久就被 Spring 移除了,所以在Spring 中控制反转也被称作依赖注入。

她的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器 (在 Spring框架中是IOC容器)负责将这些联系在一起。 在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

在Spring中,通过IOC可以将实现类、参数信息等配置在其对应的配置文件中,那么当需要更改实现类或参数信息时,只需要修改配置文件即可,这种方法降低了类与类之间的耦合。 我们还可以对某对象所需要的其它对象进行注入,这种注入都是在配置文件中做的,Spring的IOC的实现原理利用的就是Java的反射机制,Spring还充当了工厂的角色,我们不需要自己建立工厂类。Spring的工厂类会帮我们完成配置文件的读取、利用反射机制注入对象等工作,我们可以通过bean的名称获取对应的对象。

对于属性赋值的控制权,从原来的在类中完成赋值,转移到在Spring配置文件中完成赋值。实现原理是通过工厂设计模式以及代理模式机制来实现,有利于解耦和。

二、依赖注入

类中所依赖的成员变量的值,通过Spring的注入机制完成属性的赋值。Spring设计的核心是org.springframework.beans包(架构核心是org.springframework.core包),它的设计目标是与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。下一个最高级抽象是BeanFactory接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。

BeanFactory 支持两个对象模型
  1. 单例:模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
  2. 原型:模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 则将处理事情的责任从应用程序代码转移到框架。
Spring注入方式

set注入:通过set方法实现给属性赋值(设值注入)

  1. 基本数据类型、String(通过value属性或者value子标签完成)
  2. 数组/集合(list、set、map):数组/list(通过list标签)、set(通过set标签)、map(通过map标签以及entry标签)
  3. 自定义类型(类类型)(通过ref子标签bean属性或者ref属性完成)
  4. Properties类型
<bean id=”user2” class=”com.entity.User”>
    <property name=”properties”>
        <props>
            <prop key=”a”>aaaaaaa</prop>
            <prop key=”b”>bbbbbb</prop
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值