`
李灵晖-raylee
  • 浏览: 128986 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

1.1.1 Spring里面的依赖注入思想

 
阅读更多

1.spring,他的目的就是简化java 的编写工作

例子1:

public class PersonOfOnlySingingASong extends Person {
	private SingASongImpl sing;
	
	public	PersonOfOnlySingingASong(){
		sing = new SingASongImpl();
	}
	
	public void singOnQuest() {
		sing.singASong();
	}
}



上面的例子在PersonOfOnlySinging运行构造方法的时候,就已经把sing这个类生成了实例,这样其实是很难进行单元测试与重用,这个人只能唱A这首歌,唱其他的就不行了,简单的说耦合太高了,两个类紧紧相依,无法分开。

由于上面的例子不便于测试(因为每次测试都需要保证SingASong的实现)还有不便于重用,所以产生了下面的例子

例子2:

public class PersonOfNotOnlySingingASong extends Person {
	private ISing sing;
	
	public	PersonOfNotOnlySingingASong(ISing sing){
		this.sing = sing;
	}
	
	public void singOnQuest() {
		sing.singASong();
	}
	
	public static void main(String[] args) {
		PersonOfNotOnlySingingASong temp= new PersonOfNotOnlySingingASong(new SingASongImpl());
		temp.singOnQuest();
	}
}




所谓的注入:就是往接口里面放入一个实现,而这个实现不是这个人生成的时候就已经具备的,而是由这个人去控制选择实现,也就是控制反转,控制实现哪个被反转了,不再有生成人的那一刹那决定,而是把控制权放到了人生成后需要什么就实现什么


在上面的例子里面,我们引入接口ISing,SingASongImpl现在就变成只是ISing的一个实现,也许我们会有其他的实现(如:SingBSong等),这样,Person就不单单只是唱一首歌,而是变成(或者说是抽象成)一种能力“唱歌”,这个人会唱歌,这是一个抽象(也是平常说的接口),他不一定唱A这首歌,还可以唱其他歌曲,只有有其他歌曲的实现,他照样能够唱出来。所以,上面的例子体现了Spring里面其中一种注入方式:构造器注入


扩展:

接口:(我觉得下面的解释会比较清楚)

interface就是一种介面﹐规定欲沟通的两物件(平常说的对象Object的另外一个说法)﹐其通讯该有的规范有哪些。一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一个interface中﹐然后让所有不同类别的Java物件(平常说的对象Object的另外一个说法)可以共同操作使用之。


如果我在上面的例子中还不满意那个人只能唱歌,我就可以再定义一个空接口IDo(定义这个人可以做事情,唱歌只是Do里面的其中一部分,Sing继承Do)

例子:

public class PersonOfDo extends Person {
	private IDo domainOfDo;
	
	public	PersonOfDo(IDo doThing){
		this.domainOfDo = doThing;
	}
	
	public void doOnQuest() {
		domainOfDo.doThing();
	}
	
	public static void main(String[] args) {
		SingASongImpl singASongImpl = new SingASongImpl();
		PersonOfDo personOfDo = new PersonOfDo(singASongImpl);
		personOfDo.doOnQuest();
	}
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Spring攻略PDF版

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 ...

    Spring攻略中文版PDF

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 ...

    Spring攻略英文版(附带源码)

     1.3 应用控制反转和依赖注入   1.3.1 问题描述   1.3.2 解决方案   1.3.3 实现方法   1.4 理解不同类型的依赖注入   1.4.1 问题描述   1.4.2 解决方案   1.4.3 实现方法   1.5 使用配置...

    spring in action英文版

     1.4.1 依赖注入  1.4.2 IoC应用  1.4.3 企业级应用中的IoC  1.5 应用AOP  1.5.1 AOP介绍  1.5.2 AOP使用  1.5.3 企业级应用中的AOP  1.6 Spring比较  1.6.1 比较Spring和EJB  1.6.2 ...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring攻略(第二版 中文高清版).part1

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 AOP 24 第2 章 Spring 常用配置 30 2.1 Bean 的Scope 30 2.1.1 点睛 30 2.1.2 示例 31 2.2 Spring EL 和资源调用. 33 2.2.1 点睛 33 2.2.2 示例 33 2.3 Bean 的初始化和...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 AOP 24 第2 章 Spring 常用配置 30 2.1 Bean 的Scope 30 2.1.1 点睛 30 2.1.2 示例 31 2.2 Spring EL 和资源调用. 33 2.2.1 点睛 33 2.2.2 示例 33 2.3 Bean 的初始化和...

    Spring攻略(第二版 中文高清版).part2

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    1.3.1 依赖注入 18 1.3.2 Java 配置 21 1.3.3 AOP 24 第2 章 Spring 常用配置 30 2.1 Bean 的Scope 30 2.1.1 点睛 30 2.1.2 示例 31 2.2 Spring EL 和资源调用. 33 2.2.1 点睛 33 2.2.2 示例 33 2.3 Bean 的初始化和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    Java Web程序设计教程

    11.4.2依赖注入的3种方式 236 11.5beanfactory与applicationcontext 238 11.5.1认识beanfactory 238 11.5.2使用applicationcontext 238 11.6项目实战——spring问候程序 239 本章小结 241 课后练习 241 第12...

    webx3框架指南PDF教程附学习Demo

    1.1.1. 框架的本质 ..................................................................................... 4 1.1.2. 基础框架 ...............................................................................

    《程序天下:J2EE整合详解与典型案例》光盘源码

    10.2.2 依赖注入(DI) 10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置...

    Struts2 in action中文版

    9.2.2 使用自动连线将依赖注入到动作、拦截器和结果 205 9.3 为什么在Struts 2中使用JPA 207 9.3.1 使用JPA和Hibernate建立项目 208 9.3.2 基于Spring管理JPA编写代码 212 9.4 小结 216 第10章 探索验证框架 217 ...

    java微信公众号MVC开发框架

    通过maven生成一个webapp项目,例如项目名为weixin,在maven配置文件pom.xml中添加jwx依赖,jwx的1.1.1jar包已经提交到maven中心仓库,通过中心仓库搜索jwx关键字可以获取jar包依赖配置。 <groupId>...

    iBATIS实战

    1.1 一个结合了所有优秀思想的混合型解决方案 2 1.1.1 探索iBATIS的根源 3 1.1.2 理解iBATIS的优势 7 1.2 iBATIS适合应用在何处 10 1.2.1 业务对象模型 11 1.2.2 表现层 11 1.2.3 业务逻辑层 12 1.2.4 持久层 13 ...

Global site tag (gtag.js) - Google Analytics