作者:星宇ooo | 来源:互联网 | 2023-05-25 23:38
什么是依赖查找?有人可以澄清这两个概念.
1> Michael..:
依赖关系查找是指对象本身试图查找依赖关系,例如:
ApplicationContext applicatiOnContext= new ClassPathXmlApplicationContext("/application-context.xml");
MyBean bean = applicationContext.getBean("myBean")
在这里,类本身是通过XML初始化ApplicationContext的,它是在叫做豆上下文搜索myBean
中ApplicationContext
依赖注入是指在初始化istance时自动绑定属性的时间.例如:
在application-context.xml
,我们有一行初始化bean和另一行来初始化对象,比方说MyClass
:
然后在MyClass
,你有类似的东西:
@Component
public class MyClass{
@AutoWire
MyBean myBean;
在这种情况下,您已指定初始化两个bean的两个istances.并且myClass bean有一个名为myBean的属性,由于注入已经初始化了
2> Denis Rosca..:
由于@Michael Zucchetta解释了Spring背景的不同之处,我将尝试给你一个更一般的解释.这两种方法的主要区别在于"谁负责检索依赖关系".
通常,在DI(依赖注入)中,组件不知道DI容器和"自动"出现依赖关系(例如,您只需声明一些setter /构造函数参数,并且DI容器为您填充它们).
在,DL(依赖查找)你必须具体询问你需要什么.这在实践中意味着您依赖于上下文(在Spring的Application上下文中)并从中检索您需要的任何内容.
您可以查看M. Fowler的ServiceLocator vs DependencyInjection以获得更好的解释,但我会给你一个引用:
关键的区别在于,使用服务定位器,服务的每个用户都对定位器具有依赖性.定位器可以隐藏其他实现的依赖关系,但您确实需要查看定位器.因此,定位器和注入器之间的决定取决于该依赖性是否是一个问题.
使用依赖项注入可以帮助您更轻松地查看组件依赖项.使用依赖注入器,您可以查看注入机制,例如构造函数,并查看依赖项.使用服务定位器,您必须在源代码中搜索定位器的调用.具有查找引用功能的现代IDE使这更容易,但它仍然不像查看构造函数或设置方法那么容易.
希望这可以帮助.