本文向您展示了Spring中接口注入的三种方式。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。
在上面的代码中,ClassA依赖于InterfaceB的实现。如何获取接口B的实现类的实例?传统的方法是在代码中创建一个InterfaceB实现类的实例,并将其分配给clzB。
Spring
我们经常使用接口来分离调用者和实现者。例如:
public class class a { PrivateInterfaceClzb;public init(){ Ojbectobj=class . for name(Config。双实现)。new INSTANCE();clzB=(interface b)obj;} helliphellip}在上面的代码中,ClassA依赖于InterfaceB的实现。如何获取接口b实现类的实例?传统的方法是在代码中创建一个InterfaceB实现类的实例,并将其分配给clzB。
这样,ClassA就依赖于编译时接口的实现。为了在编译时将调用者和实现者分开,有了上面的代码,我们根据配置文件中预置的实现类的类名动态加载实现类,通过InterfaceB强制转换后由ClassA使用.
这是接口注入最原始的原型。
对于Type1 IOC容器,加载接口实现和创建其实例的任务由容器完成,例如Context。查找(ServletContext。getxxx),常用于J2EE开发,是Type1 IOC的表达形式。
阿瓦隆阿帕奇是典型的1型IOC容器。
接口
构造注入,即依赖关系的设置由构造函数完成,如:
public classidibyconstructor { privatefinddatasourcedata source;privatefinalStringmessagepublic dibyconstructor(DataSourceds,Stringmsg){ this . data source=ds;this.message=msg} helliphellip}可以看到,在Type2的依赖注入机制中,依赖关系是通过类构造函数建立的,容器通过调用类的构造函数将所需的依赖关系注入其中。
PicoContainer(另一个实现依赖注入模式的轻量级容器)首先实现Type2的依赖注入模式。
Type1 接口注入
在各种依赖注入模式中,固定值注入模式在实际开发中得到了广泛的应用(很大一部分原因是受Spring框架的影响)。
在我看来,基于设置模式的依赖注入机制更加直观自然。快速启动中的例子是典型的设置注入,即通过类的setter方法设置依赖关系。
Type2构造子注入
由于它的侵入性,注入模式要求组件与特定的接口相关联,因此它不受重视,并且实际用途有限。
Type3设值注入
1.“在施工期间创造一个完整合法的对象”。对于这个Java设计原则,Type2无疑是* * *。
2.避免了setter方法的繁琐编写,所有依赖项都在构造函数中设置,依赖项集中呈现,更容易阅读。
3.由于没有setter方法,并且依赖关系在构建时由容器设置一次,组件创建后处于相对“不变”的稳定状态,因此无需担心上层代码在调用过程中执行setter方法时会破坏组件的依赖关系,尤其是对于Singleton模式的组件,可能会对整个系统产生重大影响。
4.同样,因为关联只在构造函数中表达,所以只有组件创建者需要关心组件内的依赖关系。对于调用者来说,组件中的依赖关系在一个黑盒中。从上层屏蔽不必要的信息也确保了系统的层次清晰。
5.通过注入构造函数,这意味着我们可以决定在构造函数中注入依赖项的顺序。对于严重依赖外部服务的组件,获取依赖关系的顺序可能非常重要。例如,注入依赖关系的先决条件是已经设置了组件的数据源和相关资源。
几种依赖注入模式的对比总结
1.对于习惯于传统JavaBean开发的程序员来说,通过setter方法设置依赖关系更加直观和自然。
2.如果依赖关系(或者继承关系)比较复杂,那么Type2模式的构造函数会相当大(我们需要在构造函数中设置所有的依赖关系),而Type3模式此时往往比较简单。
3.对于一些第三方类库,我们的组件可能需要提供一个默认的构造函数(比如Struts中的Action)。此时Type2的依赖注入机制反映出其局限性,很难完成我们期望的功能。
因此,Type2和Type3各有优势,而Spring和PicoContainer都为Type2和Type3的依赖注入机制提供了很好的支持。这给我们提供了更多的选择。理论上,依赖注入效果可以通过使用Type2作为主类型,Type3作为补充来实现,但是Type3更广泛地用于基于Spring Framework的应用。
以上内容就是Spring中接口注入的三种方式是什么。你学到什么知识或技能了吗?如果你想学习更多的技能或丰富你的知识储备,请关注行业信息渠道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/51140.html