聊聊spring的ioc

  平时我们老说的控制反转依赖注入是什么东西?其实说白了就是一个松紧耦合的问题,咱们可以想一想,一个javabean里面可能会有很多属性比如像下面的代码:


public class KnightOfTheRoundTable implements Knight {
private String name;
private Quest quest;

public KnightOfTheRoundTable(String name) {
this.name = name;
}

public Object embarkOnQuest() throws QuestFailedException {
System.out.println(quest.embark()) ;
return null;
}

public void setQuest(Quest quest) {
this.quest = quest;
}

public String getName() {
return name;
}
}

这是一个再普通不过的javabean了,它有两个属性,分别是String型的name和Quest型的quest。如果我们按照一般的逻辑想注入填充这两个属性,我们只能用set方法,并且要硬编码重新编译程序。但是如果name和quest是从配置文件中配置注入呢?这样我们就可以随时改变配置文件来实现无需重新编译程序而且很轻松的注入属性。注入属性这个事情交给了配置文件来做,这就是所谓的控制反转,控制权转移了,交给了配置文件了,而不是程序了。而依赖注入其实就是依赖配置文件对javabean的属性进行注入,这其实是一个意思。好了,让我们看看配置文件是怎么写的,这里的注入有两种方式,一种是通过构造函数注入,另一种是利用set方法注入

看下面代码:

<bean id="quest" class="com.ioc.HolyGrailQuest"/>

<bean id="knight" class="com.ioc.KnightOfTheRoundTable">

<constructor-arg value="Bedivere" />
<property name="quest"
ref="quest" />
</bean>

这是两个bean,一个是id为quest的bean,他其实就是一个Quest类型的bean。还有一个是knight,它其实就是KnightOfTheRoundTable。KnightOfTheRoundTable里面有两个属性,其中name属性可以以构造函数的方式注入,就是上面的<constructor-arg
value="Bedivere" />,另外一个quest属性用set方法注入,就是<property name="quest"
ref="quest" />。注意,如果quest也有构造函数的方式注入,那配置文件可以这样写:<constructor-arg
ref="quest" />。
 注意无论是构造方式或者set方式里面的配置文件中的value属性的使用,实际的属性是String或者int等都没区别,一样是用value属性,spring会根据字段属性自动决定正确的类型

聊聊spring的ioc,布布扣,bubuko.com

时间: 2024-10-12 05:33:55

聊聊spring的ioc的相关文章

朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件

朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 [下载本文PDF进行阅读] Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的作为各种数据源桥梁的Data.最近几年很火的Boot,以及最新推出的正在蓬勃发展的Cloud(在本文之后都简单称为Boot.Cloud省略Spring节省一点我的打字时间??). 上面这个脑图给出了Spring家族主要的一些成员,右侧非Cloud部分列的是功能,左侧Cloud部分虽然组件繁杂,但是结

spring中IOC的简单使用

spring的ioc主要就是依赖注入,有基于构造器的依赖注入还有通过设值注入,这里我只简单的实现设值注入的方法,通过spring的依赖管理,我们可以很方便的了解各层之间的依赖关系,降低了各层之间的耦合,我们可以不用过多的去关注对象的管理和创建,我们只需要去bean工厂申请即可,这样我们更多的注意力就可以放到真正的代码实现,而不用去关心代码的创建和销毁.,接下来时简单的设值注入. 我们先简单的去创建一个学生类和老师类 public class Student { public void outhi

Spring之IOC容器注入

上一篇做了IOC和AOP的原理介绍,这一篇主要讲解IOC的注入.不过我依然困惑一个问题: 一 : 依赖注入(DI)中有三种注入方式,那Spring中到底实现了几种方式?也是三种? IOC在很多框架中都有实现,并不是Spring特有的,之前说过IOC主要包含DL(Dependency Lookup)和DI(Dependency Injection),也就是说实现IOC的技术有很多,但是主要包含DI和DL,但是相对而言,DI应用范围比较广泛,我想这也是为什么Martin Fowler将控制反转用依赖

Spring的Ioc

引用:http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框

一点一点学架构(三)——Spring.NET IOC

IOC背景介绍 传统的实现: 由程序内部代码来控制类与类之间的关系(如:在一个具体的类中,调用另一个类的方法). 使用new关键字来实现两个类之间关系的组合. 这种实现方式会造成类之间耦合. IOC的实现: 它将类间关系从程序内部提到外部容器,也就是说由容器在运行期将类间的某种依赖关系动态注入类中. 对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A. IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的

spring的IOC和AOP详细讲解

1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期! spring的IOC有三种注入方式 : 第一是根据属性注入 也叫set方法注入: 第二种是根据构造方法进行注入: 第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿. Spri

Spring之IOC容器加载初始化的方式

引言 我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配置文件告诉Spring 的IOC容器.在我们的完成这些配置文件以后,如果IOC容易要实现对这些Bean的管理,除了资源的定位还有一个很重要的一步就是完成IOC加载初始化,也就是配置文件的载入过程.完成IOC容器加载初始化的方式只要有三种,第一种就是通过File文件加载,第二种是通过Classpath

Spring 实践 -IoC

Spring 实践 Spring简单介绍 Spring是分层的JavaSE/EE Full-Stack轻量级开源框架.以IoC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)为内核, 代替EJB的臃肿/低效/脱离现实. 主页http://spring.io/ IoC与DI IOC: 即控制反转, 解决程序对象紧密耦合问题(方式: 工厂+反射+配置文件), 将程序中原来构造对象的操作,交给IoC容器, 当程序真正须要

深入理解Spring的IOC容器

IOC概述 IOC是Spring容器的内核,AOP.声明式事务等功能都依赖于此功能,它涉及代码解耦.设计模式.代码优化等问题的考量,我们将通过以下三个方面来深入理解IOC: IoC的初步理解 IoC的注入类型 构造器注入:通过调用类的构造函数,将接口实现的类通过构造函数变量传入. 属性注入:通过setter方法完成调用类所需依赖的注入,更加灵活方便. 接口注入:将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法. IoC的注入方式 Spring最为一个容器,通过配