看一个生活中的例子:java
这里的好处显而易见,就是项目组不须要关注招人,面试,谈待遇等等一堆事情,只须要提出用人要求就能够。面试
对应到代码中:微信
这里的好处是Class A不须要关注要使用的类如何建立,只须要声明要使用该类则可,由容器来建立并注入这个类。post
而容器怎么分配Class B给Class A就引出了依赖注入(DI)。单元测试
容器要想注入Class B给Class A的几种方式:测试
1.构造器注入:this
Class A
private B b;
@Autowired
public A(B b) {
this.b = b;
}
}
复制代码
2.参数注入spa
Class A
@Autowired
public void exec(B b) {
b.doSomeThing();
}
}
复制代码
3.属性注入code
Class A
@Autowired
private B b;
public void exec() {
b.doSomeThing();
}
}
复制代码
本质的好处是解耦,而Spring的依赖注入体现为如下好处:cdn
1.容易测试,依赖的对象是注入的,所以能够在单元测试时Mock一个对象并注入来测试
比较如下代码:
Class A {
public void exec() {
B b = new B();
b.doSomeThing();
}
}
Class A {
public void exec(B b) {
b.doSomeThing();
}
}
复制代码
第一种方式Class B是在方法内部自行构建的,测试时没有办法Mock,而第二种方式则能够Mock Class B后传入。
2.不须要本身实现单例模式,Spring中的Bean默认都是单例模式,单例的做用是减小类实例,从而减小内存占用,而且不用每次使用时都从新实例化,提升效率。
3.基于依赖注入使得容器能够统一管理Bean以及Bean的生命周期,在Bean的生命周期管理时,能够统一实现一些通用的公共逻辑,而不须要每一个Bean单独再实现一遍。
end.
相关阅读:
Spring Boot入门(一)初识Spring
Spring Boot入门(二)知识地图
Spring Boot入门(四)全局异常处理
站点: javashizhan.com/
微信公众号: