弹簧-样品IoC,不是DI
作者:互联网
依赖注入是控制反转的某种形式.
>有人可以指定其他形式的
控制,那不是依赖注入吗?
>是否有任何IoC容器但不是DI的Java框架
容器 ?
>弹簧的哪一部分是IoC,而不是DI?
解决方法:
控制反转是允许框架运行您的自定义代码的能力.正如马丁·福勒(Martin Fowler)所说的here:
Inversion of Control is a common phenomenon that you come across when
extending frameworks. Indeed it’s often seen as a defining
characteristic of a framework.
因此,这是控制反转的示例:
public class HomePage : Page
{
protected override void OnPageLoad(object sender, EventArgs e) {
// here your custom code
}
}
在这里,我们有一些自定义类,“按照某种约定”,框架(在这种情况下为ASP.NET Web窗体)会拾取并运行我们的自定义代码.在此完成的方法是继承并覆盖框架提供的基类的虚拟方法.
因此,这是控制反转的另一个示例:
public class HomeController : Controller
{
public ActionResult Save(HomeSaveModel model) {
// here your custom code
}
}
在这里,我们有自己的自定义控制器,在该框架中,框架将再次按照约定调用我们的代码.在这里,我们仍然使用框架提供的基类,但是现在框架将使用反射来调用Save操作.
控制权的反转全都与挂钩框架代码有关.请注意,在以上示例中,从没有任何依赖注入(也没有Service Location).
Is there any java framework that is IoC container, but is not a DI container ?
“ IoC容器”这个名称具有误导性,因为这些工具旨在帮助您在应用程序中连接依赖关系图,而无助于将代码连接到框架. IoC是框架的属性;如果不执行IoC,那不是框架:它是一个库.因此,“ IoC容器”是库,而不是框架,并且它们通常与我们使用的框架(例如Web框架,例如ASP.NET)没有关系.
因此,从这个意义上讲,不存在“ IoC容器”之类的东西,因为这是他们无法做到的.根据定义.在这种情况下,您的问题不再有意义:-),但仍然要回答:不,“ IoC容器”始终是“ DI容器”,但从来都不是“ IoC容器”.
标签:dependency-injection,spring,inversion-of-control 来源: https://codeday.me/bug/20191121/2049636.html