`
M_ittrue
  • 浏览: 75348 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

IOC设计模式的理解

阅读更多
  IOC全称是Inversion of Control,即反转控制,或者说是依赖注入更为合适。选择别纠结这些全称的专业词。我们可以用别外一些方式去理解它,IOC,是一种设计模式。它的延生所要实现的是把藕合从代码中移出去,统一放到XML文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。

    IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实 际的应用程序代码分开。其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
   看了这些,头晕没?

   没关系,继续。IOC中最基本的Java技术就是“反射”编程,至天反射机制,可以查看我的另一篇《java中的反射机制》.如果你理解了反射,你就知道,IOC,就是为了动态的创建对象,而不是在代码中写死去生成某一种特定的对象。通过IOC模式,我们可以通过改变XML上的配置文件,去改变各种的依赖关系。每当IOC容器去读取XML文件后,就会根据给出了的类名来生成对象。所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

下面来说说IOC的缺点吧,了解其缺点可以更进一步的了解其用法。
  1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象 生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3) 缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

  说了那么多,都晕了吧。呵呵,再坚持一下啊,我们胡老师给我们讲的时候,我们也是这样的啊,可是,下面是大家最想看的嘛,嗯,下面是一些代码的附助讲解。
/*
 * 
 */
public interface IVehicle {

	 public void startMe();//启动
	 public int forward(int dins);//前进
	 //有多少油
	 public int getEnergy();
}

//这就是核心代码....哈哈,别失望啊,是的,就是这么点代码。
	public static IVehicle createIVehicle(String className){
		try{
			IVehicle v = (IVehicle)Class.forName(className).newInstance();//这一句,在说到反射的时候就提过了,现在再出现,足可见其重要性,我确实感觉到其强大,只要给我一个存在的类名,我就可以返回你一个实例,有了实例,你想操作什么都行哦`
			return v;
		}catch(Exception ef){
			ef.printStackTrace();
		}
		return null;
	}


  下面再讲讲IOC模式的三种注入,包抱Setter注入,构造注入(代理对象),以及接口注
由于Spring并不支持接口注入,而我们接下来的项目将用到Spring这种实现了IOC模式的容器,所以,接口注入就不说了,想知道的话,baidu,google,bing都行。
[
//构造注入
class BigBm implements IVehicle{
	private IVehicle v;
	//带参构造器,每创建一个BigBm对象,就必须传入一个IVehicle对象
    public BigBm(IVehicle v){
    	this.v = v;
    }
    
	 public void startMe(){
		 System.out.println("启动了..");
		 v.startMe();
	 }
	
	 public  void test(IVehicle v){
		 BigBm b = new BigBm(v);
		 b.startMe();
	 }
}


//Setter注入
public class classA{
	private classsB b;
	public void Setter(classsB b){
		this.b = b;
	}
	public void doSomething(){
		
		System.out.println("注入了!!");
	}
}

public class classB{
	
}

public class text{
  	
	public static void main(String args[]){
		classB b = new classB();
		classA a = new classA();
		a.Setter(b);
		a.doSomething();
	}

}
分享到:
评论
2 楼 3258964 2017-12-18  
若不理解,可参考
http://www.srccode.cn/a_6.html 中的图片解释
1 楼 luhouxiang 2015-11-17  
最后的示例代码有点怪,BigBm 这个根本没用到classA classB与之前的没关系啊,望指教

相关推荐

    SpringIOC和AOP原理设计模式

    在接触Spring的过程中,听到最多的无非两个名词,一个是控制反转一个是依赖注入。...AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能理解的。下面用一个图和语言来进行描述:切面

    Android应用开发中控制反转IoC设计模式使用教程

    主要介绍了Android应用开发中控制反转IoC设计模式使用教程,IoC其实更常被理解为一种依赖注入的模式,用来分解业务层降低耦合,需要的朋友可以参考下

    ASP.NET设计模式-杨明军译(源码)

    《asp.net设计模式》涵盖了开发企业级asp.net应用程序的知名模式和最佳实践。本书用到的模式可以用于从asp.net1.0到asp.net 4.0的任何版本。不必管模式本身所用的语言,可以将模式用于任何面向对象编程语言。  ...

    绝对深层次IOC和AOP的理解

    实现IOC的主要设计模式是工厂模式。 AOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程 (OOP)。 AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向...

    设计模式java源码

    设计模式本身有很多种理解,可以使用接口也可以使用抽象类,关键是类作为传递参数, 理理思路,所以就写了23个模式的JAVA实例,假如以后有时间就写一些多个设计模式的组合实例, MVC\IOC\DAO\AOP运用那些模式,他们...

    DI 设计模式.docx

    拜读过Martin Fowler大师的关于IOC容器和DI模式的大作,深感受益匪浅,恰逢正在开发的项目使用了这种技术,因此也想班门弄斧,谈一下自己对IOC容器以及依赖注入的一点理解。 仅凭自己对Martin Fowler大师的大作一点...

    20万字必备java面试八股文宝典-多线程.数据库.Spring.SpringBoot.Linux.分布式.设计模式.面试指导

    这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...

    用项目案例彻底理解SpringIOC容器

    ●运用工厂模式设计程序●理解JavaBean和POJO对象●理解控制反转思想●理解IOC容器在一个乡村小学校,一天只上三节课,有三名老师和一个校长。张老师负责教学生语文,王老师教学生数学,李老师教音乐,校长负责安排...

    Laravel学习教程之IOC容器的介绍与用例

    Laravel使用IoC(Inversion of Control,控制倒转,这是一个设计模式,可以先查看下百科)容器这个强有力的工具管理类依赖。依赖注入(也是一种设计模式,一般用于实现IoC)是一个不用编写固定代码来处理类之间依赖...

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    java-advance:java进阶,包含 常用设计模式、线程和并发、spring核心代码、mybatis核心代码、springboot2.0、springcloud G版本、docker的使用、各类面试题

    java进阶源码分析专题常用设计模式线程与并发锁的使用深度理解synchronized、volatile、cas手写ASQSpring5IOC容器设计原理及高级特性AOP设计原理FactoryBean与BeanFactorySpring事务处理机制Spring JDK动态代理...

    javaEE j2ee 大学考试题库, j2ee开发面试题库2

    1. 下面哪个选项不属于 MVC 设计模式的三个核心模块( ) A. 模型 B. 视图 C. 数据库连接 D. 控制器 2. Mybatis 的核心处理类是( ) A. SqlSessionFactory B. sql C. SqlSession D. SqlSessionFactoryBuilder 3. ...

    java面试题

    答:单例模式是一种比较常见的设计模式,带给我们以下好处: 1:控制资源的使用 2:控制实例的产生数量 3:让多个不相关的两个线程或进程之间实现通信 为什么要用spring? 答:1、主要将各个框架有效的联系起来...

    Spring中眼花缭乱的BeanDefinition.docx

    为什么要读Spring源码,有的人为了学习Spring中的先进思想,也有的人是为了更好的理解设计模式,当然也有很大一部分小伙伴是为了应付面试,Spring Bean的生命周期啦,Spring AOP的原理啦,Spring IoC的原理啦,应付...

    Spring学习思维笔记.xmind

    spring学习笔记脑图,简单理解aop ioc 事务管理,和spring的基本结构以及底层原理所用到的设计模式

    SSM 梳理 面试题整理

    8. Spring 中的设计模式(解释) 9. 简单介绍一下 Spring bean 的生命周期(11步) 10. Spring 能帮我们做什么 11. 描述一下 Spring 的事务 12. 什么是 Spring IOC 容器,IOC 的优点是什么? 13. 什么是 Spring 的...

    笔记_JAVA基础篇,面试必问的那些事.pdf

    所谓倒置,你必须理解如果不倒置,会怎么着,因为 A 必须要有 B,才可以调用 B,如果不倒置,意思就是 A 主动获取 B 的实例:B b = new B(),这就是最简单的获取 B 实例的方法(当然还有各种设计模式可以帮助你去...

    【基于java-ssm】大学生兼职论坛管理系统实现源码+lw+部署文档+讲解

    ②深入理解 IOC、AOP、代理、切面、循环依赖等设计与实现原理。 阅读建议:本资源旨在通过开发简化版 Spring 框架来学习其原理和内核,不仅仅是代码编写实现,更注重于需求分析和方案设计。因此,在学习过程中应...

Global site tag (gtag.js) - Google Analytics