依赖注入:DI 又称控制反转:IoC

项目名字spring_DI

一、implement包中定义了两个接口Food和Person

1.接口Food

package org.interfaces;

public interface Food {
public String eat(); //food接口有被吃的方法待实现
}

2.接口Person

package org.interfaces;

public interface Person {
public void eatFood(); //人接口有吃东西的方法待实现
}

二、.这两个接口有对应的实现类来实现其中的方法

1.Food实现类Apple

package org.interfaces.impl;

import org.interfaces.Food;

public class Apple implements Food{
public String eat() {
return "eating apple"; //实例化food 指明了是吃苹果
}
}

2.Person实现类Man

package org.interfaces.impl;

import org.interfaces.Food;
import org.interfaces.Person;

public class Man implements Person{
private Food food;

public void setFood(Food food) {
this.food = food;
}

public void eatFood() {
System.out.println(food.eat());
}
}

三、配置文件

<bean id="man" class="org.interfaces.impl.Man"> //bean id形象点 class指明这个注入用在哪里
<property name="food"> //food是Food接口类型对应的变量
<ref bean="apple"/> //ref元素表示引用 引用其他bean的值
</property>
</bean>
<bean id="apple" class="org.Interface.impl.Apple"> </bean> //food接口的实现类在哪

四、编写测试类Test

package org.test;

import org.interfaces.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Test {
public static void main(String args[]){
ApplicationContext context =new FileSystemXmlApplicationContext("src/applicationContext.xml");
Person p = (Person)context.getBean("man");
p.eatFood();
}
}

于以上代码的理解

package org.interfaces.impl;

import org.interfaces.Food;

import org.interfaces.Person;

public class Man implements Person{
private Food food;

public void setFood(Food food) {
this.food = food;
}

public void eatFood() {
System.out.println(food.eat());

// 人接口实例化对象Man
// food是接口啊 接口相当于一份图纸 得造出来实际的东西才能用这个东西拥有的方法啊 怎么能直接使用eat()方法呢?

//下面是spring中的配置 无非就是指明Food接口的实现类为Apple

// <bean id="man" class="org.interfaces.impl.Man"> //bean id形象点 class指明对应的类
// <property name="food"> //food是Food接口类型对应的变量 Man中的food没有指明对应的实现类
//    <ref bean="apple"/> //ref元素表示引用 引用其他bean的值 表示food接口的实现类去问那个叫apple的bean
// </property> 
// </bean>

// <bean id="apple" class="org.Interface.impl.Apple"> </bean> //food接口的实现类在哪

//这个bean就指明了Food接口的实现类是Apple 注意上面的food不是接口名 是作为一个变量来接收实例化对象

//1.在bean中指明了对food属性注入 即name="food"
//2.注入的值为 apple
//3.所以我们可以理解为 当需要实例化的对象来使用eat()方法时
// spring帮忙创造了这个接口的实例化对象apple 这个过程是自动的
//问:有写food的实例化对象apple啊 为嘛我们不直接apple.eat
// 如果要apple.eat
// food = new Apple();
// System.out.println(food.eat());
// 是不是就要new一个apple?这样我们人的实例Man就与Apple绑定在了一起 产生耦合
// 利用spring 我们可以再写一个实现类Pear 这样Man中无需修改 我们就能吃到梨子

}
}

spring框架——依赖注入的更多相关文章

  1. 04 Spring框架 依赖注入(一)

    整理了一下之前学习spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节我们讲了几个bean的一些属性,用来限制我们实例创建过后的状态. 但是细心的我们会发现其实上面demo创建的实例并 ...

  2. 07 Spring框架 依赖注入(四)基于注解的依赖注入

    前面几节我们都在使用xml进行依赖的注入,但是在实际的开发中我们往往偏爱于使用注解进行依赖注入,因为这样更符合我们人的思维,并且更加快捷,本节就来讲述Spring基于注解的依赖注入: 信息注入注解 @ ...

  3. 05 Spring框架 依赖注入(二)

    上一节我们讲了三种信息的注入,满足一个类的属性信息的注入,但是如果我们需要向一个实例中注入另一个实例呢?就像我们创建一个学生类,里边有:姓名,性别,年龄,成绩等几个属性(我习惯把类的域叫做属性),但是 ...

  4. 06 Spring框架 依赖注入(三)多配置文件

    在Spring前几节的学习中我们都使用了一个配置文件,就像struts2中可以包含其他的配置文件,我们能不能使用多个配置文件呢(在工程比庞大,配置比较多的时候)? Spring多配置文件分为两种: 平 ...

  5. Spring.NET依赖注入框架学习--实例化容器常用方法

    Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...

  6. Spring.NET依赖注入框架学习--简单对象注入

    Spring.NET依赖注入框架学习--简单对象注入 在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入 常 ...

  7. Spring.NET依赖注入框架学习--简介

    Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...

  8. Spring.NET依赖注入框架学习--入门

    Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...

  9. Spring.NET依赖注入框架学习-- 泛型对象的创建和使用

    Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...

随机推荐

  1. MongoDB 学习三

    这章我们学习MongoDB的查询操作. Introduction to find find方法用于执行MongoDB的查询操作.它返回collecion中的documents子集,没有添加参数的话它将 ...

  2. POJO对象建立规则

    1.所有POJO类属性必须使用包装数据类型,RPC方法的返回值和参数必须使用包装数据类型. 说明:POJO类属性没有初值是提醒使用者在使用时,必须自己显示的进行赋值,任何NPE问题,或者入库检查,都由 ...

  3. Machine Learning in Action(2) 决策树算法

    决策树也是有监督机器学习方法. 电影<无耻混蛋>里有一幕游戏,在德军小酒馆里有几个人在玩20问题游戏,游戏规则是一个设迷者在纸牌中抽出一个目标(可以是人,也可以是物),而猜谜者可以提问题, ...

  4. POJ 2485 Highways(最小生成树+ 输出该最小生成树里的最长的边权)

                                                                                                         ...

  5. OSI和TCP/IP

    OSI和TCP/IP 1.        OSI的七层网络结构(功能及特点) 1)  物理层:为数据链路层提供物理连接,在其上串行传送比特流,即所传送数据的单位是比特.此外,该层中还具有确定连接设备的 ...

  6. html5--5-7 绘制圆/弧

    html5--5-7 绘制圆/弧 学习要点 掌握arc() 方法创建圆弧/曲线(用于创建圆或部分圆) 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y ...

  7. 骨牌覆盖问题 KxM

    前面我们说了一些简单的骨牌覆盖问题,有了上面的经验,我们可以尝试解决K*M的 思路和上一篇文章所提到的3*N的 很类似: 依然是矩阵快速幂.我们需要把一个小的边固定下来作为的已知边,然后进行矩阵快速幂 ...

  8. poj2226Muddy Fields——二分图匹配

    题目:http://poj.org/problem?id=2226 把行连通块作为左部点,列连通块作为右部点,行列连通块有相交的格子就连边: 则问题转化为求最小点覆盖,即最大匹配. 代码如下: #in ...

  9. PYTHON 异常处理 二 TRY 模块

    异常处理 捕捉异常可以使用try/except语句. try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理. 如果你不想在异常发生时结束你的程序,只需在try ...

  10. zookeeper分布式安装

    1.先把zookeeper-3.5.2-alpha.tar上传解压到/usr/local/下重命名为zookeeper ############# zookeeper env ############ ...