首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

统制反转,依赖注入,好莱坞原则

2013-10-30 
控制反转,依赖注入,好莱坞原则//codepublic?class?Person{?????public?boolean?makeCall(long?number){???

控制反转,依赖注入,好莱坞原则
//code
统制反转,依赖注入,好莱坞原则public?class?Person{?
统制反转,依赖注入,好莱坞原则????public?boolean?makeCall(long?number){?
统制反转,依赖注入,好莱坞原则????????Mobile?mobile=new?Mobile();?
统制反转,依赖注入,好莱坞原则????????return?mobile.dialUp(number);?
统制反转,依赖注入,好莱坞原则????}?
统制反转,依赖注入,好莱坞原则}
统制反转,依赖注入,好莱坞原则

也就是说,类Person的makeCall方法对Mobile类具有依赖,必须手动生成一个新的实例new Mobile()才可以进行之后的工作。?
依赖注入的思想是这样,当一个类(Person)对另一个类(Mobile)有依赖时,不再该类(Person)内部对依赖的类(Moblile)进行实例化,而是之前配置一个beans.xml,告诉容器所依赖的类(Mobile),在实例化该类(Person)时,容器自动注入一个所依赖的类(Mobile)的实例。?
接口

统制反转,依赖注入,好莱坞原则//code
统制反转,依赖注入,好莱坞原则public?Interface?MobileInterface{?
统制反转,依赖注入,好莱坞原则????public?boolean?dialUp(long?number);
统制反转,依赖注入,好莱坞原则}
统制反转,依赖注入,好莱坞原则


Person类:

统制反转,依赖注入,好莱坞原则//code
统制反转,依赖注入,好莱坞原则public?class?Person{
统制反转,依赖注入,好莱坞原则????private?MobileInterface?mobileInterface;
统制反转,依赖注入,好莱坞原则????public?boolean?makeCall(long?number){
统制反转,依赖注入,好莱坞原则????????return?this.mobileInterface.dialUp(number);
统制反转,依赖注入,好莱坞原则????}
统制反转,依赖注入,好莱坞原则????public?void?setMobileInterface(MobileInterface?mobileInterface){
统制反转,依赖注入,好莱坞原则????????this.mobileInterface=mobileInterface;
统制反转,依赖注入,好莱坞原则????}
统制反转,依赖注入,好莱坞原则}
统制反转,依赖注入,好莱坞原则


在xml文件中配置依赖关系

统制反转,依赖注入,好莱坞原则//code
统制反转,依赖注入,好莱坞原则<bean?class="Person"?id="person">
统制反转,依赖注入,好莱坞原则?????<property?name="mobileInterface">
统制反转,依赖注入,好莱坞原则?????????<ref?local="mobileInterface"></ref>
统制反转,依赖注入,好莱坞原则?????</property>
统制反转,依赖注入,好莱坞原则</bean>?
统制反转,依赖注入,好莱坞原则<bean?class="Mobile"?id="mobileInterface"></bean>
统制反转,依赖注入,好莱坞原则

这样,Person类在实现拨打电话的时候,并不知道Mobile类的存在,它只知道调用一个接口MobileInterface,而MobileInterface的具体实现是通过Mobile类完成,并在使用时由容器自动注入,这样大大降低了不同类间相互依赖的关系。

什么叫控制反转呢??
套用好莱坞的一句名言就是:你呆着别动,到时我会找你。?
什么意思呢?就好比一个皇帝和太监?
有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女?
皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女?
其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上?
这就是控制反转,而把美女送到皇帝的寝宫里面去就是注射?
太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去?
整个后宫可以看成是Spring框架,美女就是Spring控制下的JavaBean?
而传统的模式就是一个饥渴男去找小姐出台?
找领班,帮助给介绍一个云云,于是领班就开始给他张罗?
介绍一个合适的给他,完事后,再把小姐还给领班,下次再来?
这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐?
这就是lookup()方法,领班手中的小姐名录就是JNDI//Java Naming and Directory Interface?
小姐就是EJB,饥渴男是客户端,青楼是EJB容器?
看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去?
而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了?
而不是皇帝,必要时候由太监给注射进去就可以了?
看到Spring的美妙了吧,Spring还提供了与多个主流框架的支持?
可以和其它开源框架集成?

热点排行