博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊spring的ioc
阅读量:4701 次
发布时间:2019-06-09

本文共 1445 字,大约阅读时间需要 4 分钟。

  平时我们老说的控制反转依赖注入是什么东西?其实说白了就是一个松紧耦合的问题,咱们可以想一想,一个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会根据字段属性自动决定正确的类型

转载于:https://www.cnblogs.com/xiezichang/p/3772125.html

你可能感兴趣的文章
类名.class和getClass()区别
查看>>
12/17面试题
查看>>
LeetCode 242. Valid Anagram
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>
使用Siege进行WEB压力测试
查看>>
斑马为什么有条纹?
查看>>
android多层树形结构列表学习笔记
查看>>