注:我是参考《Spring实战》这本书的
(一)2.1中我们要给Juggler加一个吟诗的功能,我们不可能说改变perform方法吧,那又有新的功能,我们又得改变这个方法,那再改变呢?频繁的修改呢?我们不可能频繁的修改这个方法。那再写一个poem接口,这样子我们只要新的能够吟诗的PoticJuggler继承Juggler并实现Poem功能既能实现。
(二)既然spring依赖注入相当new的功能,举个例子
<bean id="sonnet29" class="com.smalleaf.springidol.Sonnet29"></bean>
<bean id="poeticDuke" class="com.smalleaf.springidol.PoeticJuggler">
<constructor-arg value="15"></constructor-arg>
<constructor-arg ref="sonnet29"></constructor-arg>
</bean>
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
Performer performer=(Performer)ctx.getBean("poeticDuke");
performer.perform();
Poem sonnet29=new Sonnet29();
Performer performer=new PoeticJuggler(15, sonnet29);
performer.perform();
上下实现的功能是一样的,但是我们为什么要用spring,依赖注入,需要容器的这个东西呢?
A和B是两个类,A(B b)一个构造函数,也就是A依赖于B,我么要实现A的功能就要new一个B,那么A与B是高度耦合的,因此我们要用到IOC的思想,我们只需要这样一行代码也就是给poeticDuke注入了这样一个sonnet29 Bean,也就是将这个类传递过去,即达到我们的目的,这样我们只用<pre name="code" class="java">Performer performer=(Performer)ctx.getBean("poeticDuke");调用PoeticDuke就能完成功能,也就是容器给我们把
B注入到A中了,我们就只管实现A就可了,这样是不是A与B就解耦了。也就是我们不用实现A的时候还要实现B。
不断学习不断更新总结,菜鸟望大神门做指点。