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 ...
随机推荐
- NOIP考前感悟
闭关这么久,后来突然后悔自己前几天和暑假的状态很頽 不然进步也还能多一点吧 还好提前发现了,最后也还是努力了一把 也算不枉费自己的选择吧 从初中开始学习OI,到头来也没有什么成果 但还好自己高一 也还 ...
- [自动化平台系列] - 初次使用 Macaca-前端自动化测试(1)
1. 所先看一下官方地址,了解一下这个是不是你想要的测试工具 https://macacajs.github.io/macaca/environment-setup.html 2. 去掉sudo -- ...
- java JDBM2 的几个简单实例
JDBM2 提供了 HashMap 和 TreeMap 的磁盘存储功能,简单易用,用于持久化数据.特别适合用于嵌入到其他应用程序中. 磁盘数据库 HelloWorld.java import java ...
- ICE学习笔记 -- RFC 5245
RFC 5245 ICE 1, offer/answer model 2, ICE Step: 1) 产生候选地址(1.公网 2.NAT反射 3.Relay转发地址) Generate ca ...
- Ubuntu下codeblocks编译器程序执行对话框内能进行粘贴编辑操作的指令
如这个: gnome-terminal -t $TITLE -x
- 一套完整的前台页面增删改查以及js(easyui)
增加页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...
- 2013 gzhu 校赛
题目描述: Integer in C++ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Othe ...
- CISCO-更新路由器IOS
1,查看flash,复制IOS文件名,再上传IOS 2,传送完毕查看下flash Router# show flash: 查看flash中的信息 Directory of flash: 1 -rw- ...
- Java标准输入
Java: import java.util.*; public class Main{ public static void main(String args[]){ Scanner cin = n ...
- 最新版ADT(Build: v22.6.2)总是引用appcompat_v7的问题
昨天在ADT Manager里更新了一些组件,结果ADT不支持.索性直接下载了最新的ADT.但是发现无论创建什么类型的应用(无论支持的最低API是多少,或者是不是用模板),都会在创建应用的同时创建一个 ...