spring框架的依赖注入简单示例理解
spring的本质目的:简化java开发。
如何简化开发?–降低耦合。
如何降低耦合?–面向接口编程
package spring.ioc;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
public class ExplainDI {
interface People{
void say();
}
interface Body{
void say();
}
class Mouth{
void mouthSay(){
System.out.println("say on mouth...");
};
}
/**
*传统的实现:紧紧的耦合
*/
class BBPeople implements People{
//人需要mouth说话
private Mouth mouth;
//如果需要嘴巴来讲话 需要自行创建一个
//如果有个需求是用手语讲话,那么就需要重写mouth代码,还需要新改bbpeople中的代码
public BBPeople() {
this.mouth = new Mouth();
}
@Override
public void say() {
mouth.mouthSay();
}
}
class BPeople implements People{
//人需要身体中某个部位讲话
private Body body;
//body
//面向接口编程:把讲话的方式往上层抽象,此时可以不用改代码
public BPeople(Body body) {
this.body = body;
}
@Override
public void say() {
body.say();
}
}
@Test
public void test() {
//面向接口编程,此时BPeople非常容易传入body实例进行测试
//1.你可以手动创建
Body hand = new Body() {
@Override
public void say() {
System.out.println("使用手语讲话....");
}
};
//2.或者你配置好相关的body的实现,使用一种框架读取然后动态的把body对象传过来
//那么这里可以考虑使用一个统一标记,把对象注入到此,这就是spring的依赖注入,把需要的依赖body通过spring0容器基于事先的配置xml动态创建注入。
// @Autowired
// Body hand2;
BPeople bPeople = new BPeople(hand);
bPeople.say();
}
}