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. nginx版本策略

    近期Nginx发布了1.17.0主线版本与1.16.0稳定版本,并且发布了一篇文章< Introducing NGINX 1.16 and 1.17 >说明Nginx的版本更新策略.推荐分 ...

  2. 【LeetCode】039. Combination Sum

    题目: Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all uniq ...

  3. JSON 的正确用法:Python、MongoDB、JavaScript与AjaxJSON 的正确用法:Python、MongoDB、JavaScript与Ajax

    本文主要总结网站编写以来在传递 JSON 数据方面遇到的一些问题以及目前采用的解决方案.网站数据库采用 MongoDB,后端是 Python,前端采用“半分离”形式的 Riot.js,所谓半分离,是说 ...

  4. Oracle获取日期的特定部分

    (1)oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分 ,语法:extract ({ year | month | day ...

  5. MMU的理解

    MMU内存管理单元相关知识点总结 1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚 ...

  6. Spring框架中的@Import、@ImportResource注解

    spring@Import @Import注解在4.2之前只支持导入配置类 在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean 使用场景: import注解主要用在基于ja ...

  7. 生成分布式随机ID

    经测试,最快的一种 public class Generator { // should be between 40 (34 years) and 42 (139 years) ; // should ...

  8. openstack官方指导书

    openstack官方网站:https://docs.openstack.org/ 由于openstack的官方文档有点多,所以这里对其进行梳理一下 Release Notes 发布版本 新功能,升级 ...

  9. 后缀数组dc3算法模版(待补)

    模版: ; #define F(x) ((x)/3+((x)%3==1?0:tb)) #define G(x) ((x)<tb?(x)*3+1:((x)-tb)*3+2) int wa[maxn ...

  10. CSP 的有用资料

    具体请参考: http://software-security.sans.org/downloads/appsec-2014-files/building-a-content-security-pol ...