Spring-Framework-ioc-1

1前言

Spring-Framework是一个基于Java语言、轻量级的技术框架,从Java技术的角度看,该框架主要包括J2SE核心技术、J2EE核心技术两个模块,该框架被广泛地应用于企业级的软件应用系统的开发领域。从软件开发的角度看,Spring-Framework的核心技术包括IOC容器技术以及AOP编程技术,其中,AOP编程技术是以IOC容器技术为基础,本章节主要描述IOC的基本原理以及IOC的容器技术。

2基本原理

Java编程语言是面向对象的高级编程语言,其使用的编程技术是面向对象编程技术,简称OOP(Object-Oriented Programming),其中,Java对象是以类的方式体现,因此,Java对象是以类的实例化实现,其主要特征包括继承、封装、多态。为了满足软件系统的可扩展性、可重用性,Java技术提供很多设计模式、设计原则,而这些模式或者原则主要是用于解决Java对象之间的继承关系、实现关系、引用关系、依赖关系相关的问题,其中,设计原则包括依赖关系中的依赖倒置问题。

2.1依赖倒置(IOD)

依赖倒置的设计原则主要是用于类的继承关系、类实例对象的引用关系,其中,类的继承关系的原则包括下层依赖于上层、具体依赖于抽象、实现依赖于抽象,而从类的继承体系的分层角度看,类是以自顶向下、从抽象到具体的方式实现,因此,依赖的关系是倒置的。类实例对象的引用关系的原则包括类实例对象之间以一对一的关系、以一对多的关系使用类的继承关系的原则。举例如下所示:

假设存在类A、类B、类C、类D、类E,其中D继承B、C继承B、B继承A,A中存在方法m0,B中存在方法m1、m2,在C中实现m1、m2,在D中实现m1、m2 

类E只需依赖B使用m1、m2,依赖于A使用m0,不需要关注A、B是C实现还是D实现

2.2控制倒置(IOC)

控制倒置(IOC)是Spring-Framework技术框架提供的设计原则,该设计原则与依赖倒置的设计原则保持一致,因此,控制倒置也被称之为依赖注入,Spring-Framework提供IOC容器装载符合IOC设计原则定义的类实例对象、及其存在依赖关系的类实例对象,IOC容器在装载的过程中,通过事先定义的依赖关系,并使用构造函数参数、工厂方法参数、设置属性域的方法注入被依赖的类实例对象。

2.3依赖注入(DI)

理论上,依赖注入是实现IOC的处理过程,其中包括前面所述的设计原则与实现方法,在后续章节中将进行详细的描述。

3IOC容器(IOC Container)

IOC容器是用于装载满足IOC设计原则的类实例对象,在框架中类包org.springframework.beans、org.springframework.context是实现IOC容器的基础类,其中,BeanFactory提供配置以及基础功能,而ApplicationContext扩展BeanFactory并提供更多企业级特性的应用开发功能,支持对beans的全面管理。在Spring-Framework技术架构中,由IOC容器托管的Java类实例对象被称之为beans,而由Java语言规范可知,bean是对Java类实例对象的标准定义。因此,bean就是一个由IOC容器负责实例化、装配、装载以及管理的类实例对象,而位于IOC容器中的bean之间的依赖关系是由预先定义的元数据信息所反映。

3.1基本定义

Spring-Framework技术框架使用org.springframework.

context.ApplicationContext接口定义IOC容器的基本规范与基本行为,这些基本行为负责实例化、配置、装配对应的beans,而这些beans是由预先配置的元数据信息定义,并且以XML/Java注解/Java代码的形式提供,在这些元数据信息中定义业务应用需要的Java对象以及Java对象之间的引用与依赖关系。

其中,类ClassPathXmlApplicationContext、

类FileSystemXmlApplicationContext实现了XML形式的元数据信息的配置机制(在后续章节中详细描述)。IOC容器的结构图(数据流图)如下所示:

Your Business Objects(POJOs)

业务应用对应的Java类实例对象,符合POJO标准规范,作为IOC容器的输入源,对应beans

Configuration Metadata

配置元数据,定义IOC容器的beans以及beans之间的依赖关系、定义AOP能力或者其他框架能力,例如XML、Java注解、Java代码

The Spring Container

Spring-Framework技术框架提供的IOC容器,根据前面两项的输入,实例化beans、以及绑定beans之间的引用关系或者依赖关系

Fully configured system

由IOC容器提供的运行时开发环境,开发者使用Spring-Framework技术框架提供的基础能力实现业务逻辑、并最终提供可用的业务能力

3.2基本用法

IOC容器的基本用法主要包括配置元数据信息定义IOC容器、实例化IOC容器、使用IOC容器实例三个部分。

3.2.1定义容器

Spring-Framework技术框架支持多种以配置元数据的方式定义IOC容器,其中包括XML配置文件、Java类注解,XML配置文件是最基本的方式,而Java类注解是JDK提供的基础能力,Spring-Framework使用Java类注解实现并提供包括@Configuration、@Bean、@Import、@DependsOn等等元数据定义。如下所示XML配置元数据:

以上所述的XML属性的简要描述:

属性id

在IOC容器中,标识一个唯一性的bean

属性class

使用全限定名称(类包 & 类)指定bean的类型

3.2.2实例化容器

Spring-Framework使用以下的方式实例化IOC容器:

ApplicationContext context =

new ClassPathXmlApplicationContext(

"services.xml",  "daos.xml");

services.xml配置元数据如下所示:

daos.xml配置元数据如下所示:

组合定义多个XML配置元数据文件如下所示:

以上所述的XML属性的简要描述:

属性resource

一般情况下,指定的资源文件与被导入的资源组合文件位于同一个目录下,其路径支持绝对路径、相对路径

file:C:/config/services.xml表示文件系统的绝对路径

classpath:/config/services.xml表示Jar包的绝对路径

3.2.3使用容器

如下所示,实例化一个命名为context的IOC容器,并使用其中的service服务:

(未完待续)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangys2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值