IOC (Inversion of Control) 控制反转

我的理解:将创建对象的控制权从代码本身转交给了外部容器(spring容器)。

1.将组件对象(业务对象)的控制权从代码本身转移到外部容器。

在代码中不使用关键字new来构建一个业务实例,而是在配置文件中。通过xml节点知道容器如何对内存中构建的对应类型的对象名称做命名。

DI依赖注入(Dependency Injection)

DI依赖注入:创建对象实例时,为这个对象注入属性值或其它对象实例(域属性)。

<!-- ioc-->

<bean id="happyService" class="cn.happy.Service.HappyService">

<!-- DI 属性值  依赖注入 -->

<property name="info" value="Spring"></property>

下面来一个墨盒的案例

Ink 颜色  paper 纸张  print 打印机

/**
 * Created by Administrator on 2017/7/23. 墨盒的接口
 */
public interface Ink {

//获取颜色的方法

public String getColor();

/**
 * Created by Administrator on 2017/7/23. 实现类

什么颜色的墨盒
 */
public class GrayInk  implements  Ink{
    public String getColor() {
        return "黑白墨盒";
    }
}

/**
 * Created by Administrator on 2017/7/23. 纸张接口
 */
public interface Paper {
    public  String getPaper();
}

/**
 * Created by Administrator on 2017/7/23. 实现类 B5类型的纸张
 */
public class B5Paper implements Paper{
    public String getPaper() {
        return "B5纸";
    }
}

**
 * Created by Administrator on 2017/7/23.  打印机
 */
public class Printer {

域属性:
    private Ink  ink;  
    private Paper paper;    
    public  void print(){
  System.out.println("用"+ink.getColor()+"\t颜色的墨盒在"+paper.getPaper()+"\t类型的纸张打印出星期三出去玩儿!没毛病啊");
    }
    public Ink getInk() {
        return ink;
    }

public void setInk(Ink ink) {
        this.ink = ink;
    }
    public Paper getPaper() {
        return paper;
    }
    public void setPaper(Paper paper) {
        this.paper = paper;
    }
}

配置文件:

<!-- IOC -->
<bean id="happyService" class="cn.happy.Service.HappyService">
    <!-- DI  属性值   依赖注入-->
     <property name="info" value="Spring"></property>
</bean>
 <!--这是彩色墨盒  -->
<bean id="colorInk" class="cn.happy.printer.ink.ColorInk"></bean>

<!--这是纸 -->
<bean id="b5Paper" class="cn.happy.printer.paper.B5Paper"></bean>
<bean id="a4Paper" class="cn.happy.printer.paper.A4Paper"></bean>

<!--这是打印机  -->
 <bean id="pinter"    class="cn.happy.printer.print.Printer">
 <property name="ink" ref="colorInk"></property>
 <property name="paper" ref="b5Paper"></property>
 </bean>

测试类:

public class SpringTest0723 {
 @Test
 public  void test02(){
ApplicationContext  ct= new ClassPathXmlApplicationContext("applicationContext.xml");
  Printer pp =(Printer)ct.getBean("pinter");
   pp.print();
    }

测试结果:

spring之控制反转的更多相关文章

  1. 【SSH】——spring的控制反转和依赖注入

    spring是一个轻量级的容器框架,主要是为了使企业的开发变得简单.高效.无论是从大小还是开销来讲,他都可以算是轻量级的,也是非侵入性的. 下图是spring的框架示意图,说到spring,就不得不提 ...

  2. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  3. Spring IoC控制反转创建实例

    Spring IoC控制反转创建实例写一个配置文件beans.xml,配置文件的约束可以访问:完整链接:https://repo.spring.io/libs-release-local/org/sp ...

  4. 学习Spring IOC控制反转和DI依赖注入总结

    30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客. 一.IO ...

  5. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  6. Spring、控制反转与依赖注入(概念)

    Spring 一个开源的控制反转(Inversion of Control ,Ioc)和面向切面(AOP)的容器框架. 主要目的:简化开发 控制反转(Inversion of Control ,Ioc ...

  7. Spring总结——控制反转,注入(配置和注解两种方式)

    一.Spring的容器: 1.什么是控制反转:传统的方法,当某个java对象A需要调用对象B时,是由调用者(对象A)通过new关键字来创建对象B的(也可以说类A依赖类B),而在Spring中,则是由s ...

  8. Spring 之 控制反转(IoC), 依赖注入(DI)和面向切面(AOP)

    关于依赖注入, 这篇博文写的非常简单易懂. https://github.com/android-cn/blog/tree/master/java/dependency-injection 此外, 博 ...

  9. 简单了解Spring的控制反转和依赖注入

    浅谈控制反转(Inversion of Control,IOC) 我们首先先来了解一下控制二字,也就是在控制"正"转的情况下,在任何一个有请求作用的系统当中,至少需要有两个类互相配 ...

  10. java之Spring实现控制反转

    先来复习一下多态吧,简单点讲,就是一个类的引用可以指向其本身以及其子类的对象. Like these: FatherClass a = new FatherClass(); FatherClass a ...

随机推荐

  1. bzoj 4278 Tasowanie —— 后缀数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4278 每次取两个后缀中字典序较小的那个的首字符: 注意超出去的部分是 inf 而不是 0,因 ...

  2. bzoj 1119 [POI2009] SLO & bzoj 1697 牛排序 —— 置换+贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1119 https://www.lydsy.com/JudgeOnline/problem.p ...

  3. PHP函数---$_Get()和$_Post()的用法

    一.$_Get()和$_Post()函数是用来传值的,即对应两种提交表单的方法,get和post. 二.$_Get方法 (1)获取通过URL的传值 Example 1 新建两个PHP文件,1.php, ...

  4. JS---计算两个日期之间相差多少天

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. ICU 是一种说不出的痛啊

    USE [Nursing] GO /****** Object: StoredProcedure [dbo].[P_GetICUVitualSign] Script Date: 05/21/2015 ...

  6. [poj2151]Check the difficulty of problems概率dp

    解题关键:主要就是概率的推导以及至少的转化,至少的转化是需要有前提条件的. 转移方程:$dp[i][j][k] = dp[i][j - 1][k - 1]*p + dp[i][j - 1][k]*(1 ...

  7. HDU 3549 Flow Problem (最大流ISAP)

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. Elasticsearch中提升大文件检索性能的一些总结

       笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...

  9. vmware中centos6.5无法启动拷贝出里面的资料的方法

    先说一下我的环境:windows7-x64位机器下安装的vmware虚拟机,里面安装的是centos6.5-x64位的系统. 系统崩溃的原因:从cenos拖拽一个文件到win7下,结果就卡死了.整个系 ...

  10. idea+tomcat 解决 debug超级慢 问题

    最近在用intellij idea 开发程序,发现debug的时候启动得特别慢,正常run的时候启动的特别快,相差30多倍. 方法断点会戏剧性的降低debug的速度.当时并没有在意,因为并不清晰这个方 ...