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 ...
随机推荐
- Linux就该这么学--命令集合2(系统状态检测命令)
1.查看本机当前的网卡配置与网络状态等信息:(ifconfig [网络设备] [参数]) ifconfig 2.查看系统的内核名称.内核发行版.内核版本.节点名.硬件名称.硬件平台.处理器类型.操作系 ...
- Windows10搭建FTP服务器
配置FTP服务器步骤: 第一步: 打开控制面板--->选择程序--->启动或关闭Windows功能--->勾选FTP服务器等.如下图: 第二步: 右键此电脑--->点击管理-- ...
- OI中字符串读入和处理
OI中字符串读入和处理 在NOIP的"大模拟"题中,往往要对字符串进行读入并处理,这些字符串有可能包含空格并以\n作为分割,传统的cin >> scanf() 等等,不 ...
- mac10.10 打造Python多版本虚拟环境
一.简介 1.在操作系统mac10.10(yosemite)中搭建Python多版本虚拟环境: 2.多版本虚拟环境包含三个含义: 在一个操作系统中安装多个版本的Python,不同版本可以随意切换,例如 ...
- apache配置文件详解及虚拟主机的搭建
1.404跳转: <IfModule dir_module> DirectoryIndex index.php index.html /error.php</IfModule& ...
- ps 工具栏使用
1:称动工具,快捷键是v,则选中移动工具:按shift和左键,可移动当前层移到另一层的中间对齐.如果不用sfhift键,则只是移动:alt+左键上移动,则复制层:alt+中间滚轮,则为放大和缩小. 2 ...
- 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入Ubuntu问题的一种解决办法。【转】
本文转载自:http://blog.csdn.net/u012879090/article/details/74937762 在win7系统下安装把Ubuntu17.04安装在另一个硬盘开机无法进入U ...
- System.exit(0);和finish();,push原理
今天师姐问我安卓后台的问题,想起几年前做进制转换的时候特意研究了一下怎么才能「不驻留内存地退出」.虽然Android不推荐用户手动关闭进程,但是在那个内存捉襟见肘的年代,不得不考虑内存. 首先直接按b ...
- SQL Server 2008将数据导出为脚本 [SQL Server]
之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特 ...
- IOS造成卡顿的主要原因
1. cellForRowAtIndexPath, 单元格视图重用, 注意尽量让所有视图重用, 只根据单元格row和section的不容更换不同的数据, 而不是每次都生成新的单元格, 这是程序奔溃的前 ...