Java 依赖注入示例

Java 依赖注入示例,java,dependency-injection,inversion-of-control,Java,Dependency Injection,Inversion Of Control,关于DI和IoC有一个很好的解释 在injector类中使getCustomer方法静态不是更容易吗?在这种情况下,我看不出有任何理由实例化injector对象 因此,不是: MessageServiceInjector injector = null; Consumer app = null; injector = new EmailServiceInjector(); app = injector.getConsumer(); app.processMessages(msg, email)

关于DI和IoC有一个很好的解释

在injector类中使
getCustomer
方法静态不是更容易吗?在这种情况下,我看不出有任何理由实例化injector对象

因此,不是:

MessageServiceInjector injector = null;
Consumer app = null;

injector = new EmailServiceInjector();
app = injector.getConsumer();
app.processMessages(msg, email);
我们只会:

Consumer app = null;
app = EmailServiceInjector.getConsumer();
app.processMessages(msg, email);
如何正确编写注入器类?文章最后说

我们可以通过工厂模式、模板方法设计来实现IoC 模式、策略模式和服务定位模式

但是我猜在这个例子中没有使用任何模式(在这个例子中,IoC只是简单化了)。那么,在一个真实的项目中(假设没有使用外部框架或IoC容器),也就是说,如果我想创建所有必要的东西,让我在代码中使用DI,该怎么做呢?我认为这对你的DI引擎没有任何影响

静态将假定一个实例。如果您希望每个请求都有一个实例,就像您希望每个web请求都有一个实例一样,该怎么办?静电就不行了

我用弹簧已经十多年了。它有一个bean工厂和DI功能,可以处理单实例或每请求实例。看看它是如何工作的,看看一个成功的方法

我认为马丁·福勒(Martin Fowler)已经11岁了,他仍然很好地解释了这一点。

“更容易”?我认为这对你的DI引擎没有任何影响

静态将假定一个实例。如果您希望每个请求都有一个实例,就像您希望每个web请求都有一个实例一样,该怎么办?静电就不行了

我用弹簧已经十多年了。它有一个bean工厂和DI功能,可以处理单实例或每请求实例。看看它是如何工作的,看看一个成功的方法


我认为11岁的Martin Fowler仍然能很好地解释这一点。

在现实世界的项目中,您应该像这样使用依赖注入框架。他们两个也是一样的


我个人使用spring已经有两年了,除了基本的DI之外,spring的使用范围已经扩大了很多。

在实际项目中,您应该使用依赖注入框架,如。他们两个也是一样的

我个人使用spring已经有两年了,除了基本的DI之外,spring的使用范围已经扩大了很多

在injector类中使getCustomer方法静态不是更容易吗

在我看来,本文所称的注入器实际上是一个。当我们希望一个类在稍后的时间点创建对象时,我们使用抽象工厂

通常不建议使用静态方法。主要是因为调用静态方法的类将对它有一个硬依赖,也就是说,您不能在以后的某个时间点使用不同的依赖项,而不更改使用类代码。这正是DI试图解决的问题

另一个原因是很难在单元测试中模拟静态方法

那么,在一个真正的项目中该如何实现呢

在实际项目中,您应该在中构造对象(例如服务)

有两种方法可以做到这一点。要么使用DI容器,要么使用

在我看来,纯DI是一个更好的选择。看看为什么

在injector类中使getCustomer方法静态不是更容易吗

在我看来,本文所称的注入器实际上是一个。当我们希望一个类在稍后的时间点创建对象时,我们使用抽象工厂

通常不建议使用静态方法。主要是因为调用静态方法的类将对它有一个硬依赖,也就是说,您不能在以后的某个时间点使用不同的依赖项,而不更改使用类代码。这正是DI试图解决的问题

另一个原因是很难在单元测试中模拟静态方法

那么,在一个真正的项目中该如何实现呢

在实际项目中,您应该在中构造对象(例如服务)

有两种方法可以做到这一点。要么使用DI容器,要么使用


在我看来,纯DI是一个更好的选择。查看原因。

Spring一直是一个三条腿的凳子:DI、AOP和库。后者进化得最快。我认为正确的拼写是“Guice”:更正了拼写。是的,图书馆是在Spring中发展起来的。Spring一直是一个三条腿的凳子:DI、AOP和图书馆。后者进化得最快。我认为正确的拼写是“Guice”:更正了拼写。是的,图书馆是在春天发展起来的,听起来像是一个想借一本书的人。有趣的是,使用DI容器是因为它们可以工作。另一个有“更好想法”的家伙,他很痛苦,因为世界还没有接受他的事业。你不认识我。请对此发表评论。不是我,我是在评论这个话题。您的纯DI想法既不广泛,也不被认为是“更好的选择”。在GoF设计模式出现之前,工厂就已经很普遍了。事实上,你的大部分评论都不是关于这个主题的。无论如何,纯DI不是我的想法,但根据我的经验,我发现它更好。此外,当我提到纯DI是一个更好的选择时,我以“在我看来”开始了这句话,这只是我回答中的最后一句话。在此之前的一切都没有争议。在我的参考文章中,我讲述了为什么纯DI可能是一个更好的选择,并提供了一些示例。你可以评论那里写的东西,而不是指责我你不知道的事情。更好——在任何情况下?几乎不指责你?这是一本书的原始文章。你太敏感,太自大了。听起来像是一个想偷书的家伙。有趣的是,使用DI容器是因为它们可以工作。另一个有“更好想法”的家伙,他很痛苦,因为世界还没有接受他的事业。你不认识我。请对此发表评论。