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. 牛客网暑期ACM多校训练营(第三场)G:Coloring Tree(函数的思想)

    之前两次遇到过函数的思想的题,所以这次很敏感就看出来了.可以参考之前的题: https://www.cnblogs.com/hua-dong/p/9291507.html Christmas is c ...

  2. CodeForces - 1005E2:Median on Segments (General Case Edition) (函数的思想)

    You are given an integer sequence a1,a2,…,ana1,a2,…,an. Find the number of pairs of indices (l,r)(l, ...

  3. L2-028 秀恩爱分得快(25 分)

    古人云:秀恩爱,分得快. 互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度.如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K.任意两个人如果同 ...

  4. mysql客户首末单时间 group by用法_20160927

    一.取用户第一次下单时间 SELECT city,username,`order_date` AS 首单日期,金额 AS 首单金额 FROM ( SELECT city,username,`order ...

  5. 【C++】*p++ = *p不同环境下操作不同

    实测,Ubuntu16.04,gcc 5.3.0&5.4.0(编译选项选择C++11和不选择新标准结果相同) #include<iostream> using namespace ...

  6. phantomjs学习

    PhantomJS快速入门 本文简要介绍了PhantomJS的相关基础知识点,主要包括PhantomJS的介绍.下载与安装.HelloWorld程序.核心模块介绍等.由于鄙人才疏学浅,难免有疏漏之处, ...

  7. undefined reference to `pthread_create' collect2: ld returned 1 exit status

    问题原因:    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atf ...

  8. [poj3417]Network(LCA+树形dp)

    题意:给出一棵无根树,然后下面再给出m条边,把这m条边连上,每次你去两条边,规定一条是树边,一条是新边,问有多少种方案能使树断裂. 解题关键:边权转化为点权,记录每条边被环覆盖的次数,通过val[a] ...

  9. 《精通Spring4.X企业应用开发实战》读后感第五章(方法注入)

  10. (十四)hibernate逆向工程

    一.hibernate逆向工程生成实体 介绍一个模型设计工具PowerDesigner,这个是j2ee开发必要的一个工具.一般在开发中先使用PowerDesigner 创建实体关系图即概念模型.建立了 ...