Spring IOC总结

IOC

控制反转,是一种设计思想,意味着将设计好的对象交给Ioc容器控制,而不是传统的在对象的内部直接控制。

IOC容器把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象。

DI

依赖注入,组件之间的依赖关系由容器在运行期间决定。

Ioc容器注入应用程序某个对象,它所需要的外部资源(包括对象,资源,常量数据)。

Spring Ioc容器

具有依赖注入功能的容器。负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。

在Spring中BeanFactory是Ioc容器的实际代表者。BeanFactory接口提供了IoC容器的基本功能。

Spring Ioc容器通过读取配置文件中的配置元数据,通过元数据对应用中各个对象进行实例化及装配。

1 xml配置文件进行配置元数据(一般使用)

2 基于注解

3 基于java文件

Spring Ioc容器管理的对象:Bean

Bean就是由Spring容器初始化、装配及管理的对象,此外bean与应用程序中的其他对象没有什么区别.

Bean在容器内部由BeanDefinition对象表示。

BeanDefinition:

全限定类名(FQN):用于定义Bean的实现类;(必须的)

Bean行为定义:包括作用域(单例、原型创建)、是否惰性初始化及生命周期等;

Bean创建方式定义:说明是通过构造器还是工厂方法创建Bean;

Bean之间关系定义:即对其他bean的引用,也就是依赖关系定义,也就是依赖注入。

Bean的作用域:

1. “singleton”(单例,通过单例缓存池实现)

2. “prototype”(原型,每次创建全新的bean)

3. 另外提供“request”、“session”、“global session”三种web作用域;

Spring Ioc容器工作流程:(基于xml配置)

1. 准备配置文件

2. 由Ioc容器进行解析元数据,创建,组装bean

3. 客户端实例化Ioc容器,从容器中获取需要的bean

Spring IoC容器实例化Bean

根据Bean定义里的配置元数据使用反射机制来创建Bean。

1. 使用无参构造器

2. 静态工厂

3. 实例工厂

Spring IoC容器注入依赖资源的方式:

1. 构造器注入。(构造器方式,静态工厂方式,实例工厂方式都可以)

通过在<bean>中配置构造器实现,构造器参数就是依赖。

配置文件中三种表示参数的方式:参数索引,参数类型,参数名称

public HelloImpl3(String message, int index) {

this.message = message;

this.index = index;

}

<!-- 通过构造器参数索引方式依赖注入 -->

<bean id="byIndex" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg index="0" value="Hello World!"/>

<constructor-arg index="1" value="1"/>

</bean>

<!-- 通过构造器参数类型方式依赖注入 -->

<bean id="byType" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg type="java.lang.String" value="Hello World!"/>

<constructor-arg type="int" value="2"/>

</bean>

<!-- 通过构造器参数名称方式依赖注入 -->

<bean id="byName" class="cn.javass.spring.chapter3.HelloImpl3">

<constructor-arg name="message" value="Hello World!"/>

<constructor-arg name="index" value="3"/>

</bean>

2. Setter注入

通过在通过构造器,静态工厂,实例工厂实例好bean后,通过调用bean类的setter方法进行注入依赖。

只有一种方式,根据名字注入。

//setter方法

public void setMessage(String message) {

this.message = message;

}

public void setIndex(int index) {

this.index = index;

}

<bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4">

<property name="message" value="Hello World!"/>

<property name="index"><value>1</value></property>

</bean>

Spring IoC容器注入集合、数组、字典

Spring不仅能注入简单类型数据,还能注入集合(Collection、Set、List)类型、数组(Array)类型、字典(Map)类型数据、Properties类型数据。

自动装配

自动装配就是指由Spring来自动地注入依赖对象,无需人工参与。

自动装配的好处是减少构造器注入和setter注入配置,减少配置文件的长度。自动装配通过配置<bean>标签的 “autowire”属性来改变自动装配方式。

Eg.<bean id="bean" class="cn.javass.spring.chapter3.bean.HelloApiDecorator"

autowire="byName"/>

四种可选值:“no”、“byName ”、“byType”、“constructor”

如果一个bean有很多setter注入,通过“byName”方式能减少很多<property>配置。

原文地址:http://blog.51cto.com/13580976/2073508

时间: 2024-10-07 18:27:57

Spring IOC总结的相关文章

Spring IoC/DI

前言 假设项目层次划分包括logic层和dao层,logic层调用dao层完成业务逻辑,dao层一般与数据库交互.定义两个组件,TestLogic和TestDao,分别操作接口ILogic和IDao,这样程序开发时需要考虑怎样管理这两个组件. 传统方式 这种方式中,当TestLogic组件需要调用TestDao组件时,直接使用关键字new IDao testDao = new TestDao(); 这种方式简单直观,但造成了对外部组件的严重依赖,程序高度耦合,效率低下.当项目需要更换组件时需要修

手把手教你实现Spring ioc

手把手教你实现Spring ioc "Don't call us, we'll call you(不要联系我,我会主动联系你)" 这是好莱坞很经典的一句话,应用在ioc(控制反转)领域,发现理解起来相得益彰--你作为用户不需要控制业务实体的生成,交给我容器来控制,这就是控制反转.不过,这样理解起来也有点麻烦,套用面向对象大师Martin Fowler的说法更为贴切: "Dependency Inversion(依赖注入)" 当容器中所有的实体bean 都被管理起来的

Spring IOC的实现

来源:知乎 https://www.zhihu.com/question/21035417/answer/142858103 著作权归作者所有. Spring IOC的实现部分,主要分为三个部分: 第一步: Resouce:首先我们需要获取beanDefinition的资源,我们将通过Spring的resource接口获得bean的资源,这一步也叫做bean资源的定位,下面是Spring内置的一些典型实现,当然,你也可以根据自己的需要实现自己的resource: ClassPathResourc

spring IOC

本节要点: IOC容器概述 IOC容器的工作原理 BeanFactory接口及常用实现类XmlBeanFactory ApplicationContext接口及常用实现类 BeanFactory和ApplicationContext的区别 1  IOC容器概述 Spring的IoC容器实现了控制反转,即在开发过程中,开发人员不需要关心容器是怎样的,也不需要调用容器的任何API.容器会自动进行被管理对象的初始化及对象之间依赖关系的维护. 在Spring中,最重要的是两个包,提供了IoC容器的基本功

Spring IOC理解

内容来自http://blog.csdn.net/qq_22654611/article/details/52606960 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技

谈谈对Spring IOC的理解(转)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入

我讨厌注解式的Spring IOC

spring的ioc,原本是在"实例"层面上的.同样的一个类,我可以通过多个<bean>标签,得到多个实例.并且,每个bean中的属性配置都可以不一样,从而使我得到多个不一样的实例. 举个例子.我写过这样一个类: class A implements AI{ private B b; private C c; private D d; @Override public void aService(){ b.bService(); c.cService(); d.dServi

Java面试--Spring技术要点--Spring IOC

7  Spring IOC(依赖注入)的方式 Setter方法注入 构造器方法注入 工厂方法注入(实例工厂/静态工厂) 自动装配(需要开启配置,不建议使用) http://blessht.iteye.com/blog/1162131 8  IOC方式建议(构造器注入还是 Setter方法注入) 两种依赖方式都可以使用,构造器注入和Setter方法注入.最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖. 9  什么是Spring beans Springbeans是那些形成S

Spring IoC的使用配置(一)

本文主要交代Spring相关的配置的快速了解与使用,所以对于不长常使用的配置项简单叙述或不讲解,需要深入了解Spring的原理,还需读者自行学习或补充. 本例使用的Spring版本为spring-4.0.0.M2,准备环境操作如下: 一.创建Java Project项目,导入需要的Spring的jar.本例使用的包括: /SpringLearn/lib/spring-aop-4.0.0.M2.jar /SpringLearn/lib/spring-beans-4.0.0.M2.jar /Spri