spring之控制反转

摘要:
IOC控制反转我的理解是,创建对象的控制从代码本身转移到外部容器--DI属性值依赖注入--˃这里是墨盒墨水彩色纸打印打印机/**CreatedbyAdministratortoon2017/7/23的示例。墨盒接口*/publicinterfaceInk{//获取颜色publicStringgetColor()的方法;/**CreatedbyAdministratortoon2017/7/23。实现墨盒的颜色*/publicclassGrayInImplementsInk{publicStringgetColor(){return“黑白墨盒”;}}/***CreatedbyAdministratortoon2017/7/23。纸张接口*/publicinterfacePaper{publicStringgetPaper();}/**CreatedbyAdministratorn2017/7/23。实现类型为B5*/publicclassB5PaperimplementsPaper{publicStringgetPaper(){return“B5 paper”;}**CreatedbyAdministratortoon2017/7/23的纸张。打印机*/publicclassPrinter{域属性:privateInink;privatePaperpaper;publicvoid print(){System.out.println(“Use”+ink.getColor()+“彩色墨盒周三打印在”+paper.getPaper()+”类型的纸上,出去玩吧!没什么问题”);}PublicInkgetInk(){returnink;}publicvoisetInk{this.ink=ink;}publicPapergetPaper{this.paper=paper;}}配置文件:˂!

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()+"颜色的墨盒在"+paper.getPaper()+"类型的纸张打印出星期三出去玩儿!没毛病啊");
    }
    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张

免责声明:文章转载自《spring之控制反转》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转载】蓝绿部署、红黑部署、AB测试、灰度发布/金丝雀发布、滚动发布的概念与区别软件质量属性——安全性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ioctl() 参数

在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:     bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。      bit29~bit15 14位为 "数据大小"...

Spring IOC 之注册解析的 BeanDefinition

2019独角兽企业重金招聘Python工程师标准>>> DefaultBeanDefinitionDocumentReader.processBeanDefinition() 完成 Bean 标签解析的核心工作: 解析工作分为三步: 解析默认标签; 解析默认标签后下得自定义标签; 注册解析后的 BeanDefinition。 注册...

Unity依赖注入使用详解

关于控制反转(Inversion of Control)和依赖注入(Dependency Injection)大家网上可以找下相关概念,在《小菜学习设计模式(五)—控制反转(Ioc)》这篇文章中本人也有详细的解释,这边再说明下,有很多人把控制反转和依赖注入混为一谈,虽然在某种意义上来看他们是一体的,但好像又有些不同,就比如在上篇文章中所提到的示例。控制反转...

Spring 学习01

一、Spring概念 1 spring是开源的轻量级框架 2 spring核心主要两部分: (1)aop:面向切面编程,扩展功能不是修改源代码实现 (2)ioc:控制反转, - 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象 - 把对象的创建不是通过new方式实现,而是...

.NET CORE与Spring Boot编写控制台程序应有的优雅姿势

本文分别说明.NET CORE与Spring Boot编写控制台程序应有的“正确”方法,以便.NET程序员、JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写的控制台程序要好。 本文所说的编写控制台程序应有的“正确”方法,我把正确二字加上引号,因为没有绝对的正确,因人而异,因系统设计需求而异,我这里所谓的正确方法是指...

ioctl方法详解

设备控制接口(ioctl 函数)回想一下我们在字符设备驱动中介绍的struct file_operations结构,这里我们将介绍一个新的方法: int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); 这是驱动程序设备控制接口函数(ioctl函数)的内核原型定义...