码迷,mamicode.com
首页 > 编程语言 > 详细

spring框架——依赖注入

时间:2019-05-24 22:16:26      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:表示   text   sys   height   ima   苹果   产生   interface   注入   

依赖注入: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中的配置 无非就是指明接口的实现类为Apple
// <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接口的实现类在哪

//这个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框架——依赖注入

标签:表示   text   sys   height   ima   苹果   产生   interface   注入   

原文地址:https://www.cnblogs.com/yang37/p/10920431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!