spring框架——依赖注入
依赖注入: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框架——依赖注入的更多相关文章
- 04 Spring框架 依赖注入(一)
整理了一下之前学习spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节我们讲了几个bean的一些属性,用来限制我们实例创建过后的状态. 但是细心的我们会发现其实上面demo创建的实例并 ...
- 07 Spring框架 依赖注入(四)基于注解的依赖注入
前面几节我们都在使用xml进行依赖的注入,但是在实际的开发中我们往往偏爱于使用注解进行依赖注入,因为这样更符合我们人的思维,并且更加快捷,本节就来讲述Spring基于注解的依赖注入: 信息注入注解 @ ...
- 05 Spring框架 依赖注入(二)
上一节我们讲了三种信息的注入,满足一个类的属性信息的注入,但是如果我们需要向一个实例中注入另一个实例呢?就像我们创建一个学生类,里边有:姓名,性别,年龄,成绩等几个属性(我习惯把类的域叫做属性),但是 ...
- 06 Spring框架 依赖注入(三)多配置文件
在Spring前几节的学习中我们都使用了一个配置文件,就像struts2中可以包含其他的配置文件,我们能不能使用多个配置文件呢(在工程比庞大,配置比较多的时候)? Spring多配置文件分为两种: 平 ...
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
- Spring.NET依赖注入框架学习--简单对象注入
Spring.NET依赖注入框架学习--简单对象注入 在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入 常 ...
- Spring.NET依赖注入框架学习--简介
Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...
- Spring.NET依赖注入框架学习--入门
Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...
随机推荐
- 面试算法爱好者书籍/OJ推荐
面试算法爱好者书籍/OJ推荐 这个书单也基本适用于准备面试. 一.教科书 基本上一般的算法课本介绍的范围都不会超出算法导论和算法引论的范围.读完这两本书,其它的算法课本大致翻翻也就知道是什么货色了. ...
- AbstractFactory Pattern
AbstractFactory模式用来解决这类问题:要创建一组相关或者相互依赖的对象. AbstractFactory Pattern结构图 实现: #ifndef _PRODUCT_H_ #defi ...
- 常用git命令和工具
0. ln -s src_dir //一个参数即可在当前目录下生成一个软链接 1.git command --clone/push a branch git clone <url ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- Eclipse快捷键【转载】
分享一前辈的博客-Eclipse快捷键
- 最全的Android源码目录结构详解【转】
本文转载自:http://blog.csdn.net/yangwen123/article/details/8055025 Android 2.1|-- Makefile|-- bionic ...
- win7下使用source insight,没有Courier字体
http://hi.baidu.com/raoxj/item/0e3a3a3b2461c5be134b14fa 1. “控制面板:--->“字体”--->找到Courier New(建议用 ...
- linux系统配置之PATH环境变量的设置(centos)
Centos系统下修改环境变量PATH路径的方法 电脑脑中必不可少的就是操作系统.而Linux的发展非常迅速,有赶超微软的趋势.这里介绍Linux的知识,让你学好应用Linux系统.比如要把/etc/ ...
- css父元素背景覆盖其子元素背景
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Vue表格数据增删改查及搜索
<div id="app"> <div class="item"> <span class="name"> ...