依赖注入:Spring和Java
我最近开始使用Spring框架。 在一本书中,我发现了这个例子:依赖注入:Spring和Java,java,spring,dependency-injection,Java,Spring,Dependency Injection,我最近开始使用Spring框架。 在一本书中,我发现了这个例子: public class DamselRescuingKnight implements Knight { private RescueDamselQuest quest; public DamselRescuingKnight() { this.quest = new RescueDamselQuest(); } public void embarkOnQuest() { q
public class DamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
this.quest = new RescueDamselQuest();
}
public void embarkOnQuest() {
quest.embark();
}
}
使用Spring构造函数依赖项注入,示例变成:
public class DamselRescuingKnight implements Knight {
private Quest quest;
public DamselRescuingKnight(Quest quest) {
this.quest = quest;
}
public void embarkOnQuest() {
quest.embark();
}
}
而xml文件配置为:
<bean id="knight" class="com.springinaction.knights.DamselRescuingKnight">
<constructor-arg ref="quest" />
</bean>
<bean id="quest" class="com.springinaction.knights.somethingThatImplementsQuest">
</bean>
为了全面理解这个概念,,
您是否可以编写一个仅使用Java(没有Spring,因此没有xml文件)的相同类的依赖项注入的替代示例?这相当于配置文件中的依赖项注入。唯一的区别是您的
Quest
对象是在BraveKnight
实例之后创建的
public class BraveKnight {
private Quest quest;
public BraveKnight(Quest quest) {
this.quest = quest;
}
}
public class Quest {
}
public class Main {
public static void main (String[] args) {
Quest quest = new Quest();
BraveKnight knight = new BraveKnight(quest);
}
}
Java不会在某种容器的概念之外本机实现DI。“容器”是一组在代码之前获得控制权的类。它实例化bean并在适当的位置注入它们。容器可以是Spring或JavaEE系统。普通JavaSE代码(即以
main(String[])
method开始运行的代码)不进行DI。这是DI在幕后所做的,但DI的全部要点是,您的代码不必担心创建对象并将它们连接在一起。所以称之为DI有点牵强。所以两种解决方案都是相同的…骑士没有耦合到任何特定的Quest实现(与第一个示例不同)…那么我为什么要使用spring解决方案呢?