spring的依赖注入和控制反转

先看下图:

传统方式就是主动创建;例如你看到一种果汁的描述如下:

public class MakeOrange {

	private String water;
	private String sugar;
	private String orange;

你看到了描述后想要喝这种果汁,然后你主动的找到了一个生产机器,然后你把它拿l过来,

public class Orange {
	private MakeOrange ora;
	public MakeOrange getOra() {
		return ora;
	}
	public void setOra(MakeOrange ora) {
		this.ora = ora;
	}
	public String Oranger(){
		String drinks="这是一杯由"+ora.getWater()+","+ora.getSugar()+","+ora.getOrange()+",构成的饮料!";
		return drinks;
	}
}

然后你就开始造果汁了:

public String makedrinks(){
		Orange ora=new Orange();
		return ora.Oranger();
	}

你为了喝个果汁,你还要自己去创造个方法区生产,这是不是太麻烦;那我们为什么不找个第三方的人直接给我们果汁呢,

   <bean id="makeorange" class="pojo.MakeOrange">
   		<property name="water" value="水"></property>
   		<property name="sugar" value="糖"></property>
   		<property name="orange" value="橙汁"></property>
   </bean>
   <bean id="orange" class="pojo.Orange">
   		<property name="ora" ref="makeorange"></property>
   </bean>
BeanFactory ctx = new ClassPathXmlApplicationContext("spring.xml");
		Orange bean = (Orange) ctx.getBean("orange");
		String oranger = bean.Oranger();

这就是被动创建,第三方把我们想要的传递给工厂然后工厂给我们创建了我们的果汁,他怎么创建的,你是没有参与其中的,与你无关,你只是说了你想要的,然后人家给你了;这里的第三方就是Spring容器。

在这个过程中:

1)工厂依赖了你提供的果汁描述,就是她生产你想要的果汁就必须依靠你提供的资源,然后依靠容器把它需要的资源注入进去,这就是依赖注入;

2)控制反转就是从容器角度看这个过程,工厂需要你的资源,然后容器就把你的资源给它了;控制权已经不在你的手里了。




猜你喜欢

转载自blog.csdn.net/HBL6016/article/details/80211325