67,513
社区成员
发帖
与我相关
我的任务
分享
作为一个boss,我现在有一份工作,需要两个部门合力完成,我会建立一个或多个新岗位或职责到两个部门中,我不考虑具体谁去负责,部门的负责人去安排具体的人,干得不好我就问责部门负责人,我需要知道具体谁干得吗,不需要,低耦合对应到管理上就是要明确职责,方便问责也方便换人。
创建对象 和 使用对象 分离。
你这里写的是最简单的new的方式,如果是复杂依赖、多入参。那可维护性就要降低很多了。
细想一下,未来你新增一个 class D,你要改 class A 内部代码,这就违反“开闭原则”了,通过传参(注入)的形式,可以达到解耦,方便后续扩展。
最直观的好处有两点:
1.默认使用单例模式能大大减少JVM堆内存使用;
2.【依赖注入 最主要的作用是 控制反转】稍微修改下楼主的例子:
场景:除了B依赖A之外还有,C,D,E,F,G等等都依赖A。
如果都直接使用new A()的方式来使用A。那么当业务发生改变发现A不在再满足需求需要调整业务逻辑有了新的实现类A1,那就得重新修改所有使用A的B,C,D,E,F,G等等使用类的代码才能实现。而如果使用依赖注入的方式,就只需要在配置的一个地方修改即可。
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor(SpellChecker spellChecker) {
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
<bean id="textEditor" class="com.tutorialspoint.TextEditor">
<constructor-arg ref="spellChecker"/>
</bean>
<bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
</bean>
public class TextEditor {
private SpellChecker spellChecker;
// 自动寻找SpellChecker的默认实现,如果只有一个实现的话。或者通过其他注解显式指定用哪个实现。
@autowired
public TextEditor(SpellChecker spellChecker) {
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}