Day03-04 sping Boot工程中Bean的依赖注入分析
1.背景分析
Spring框架处理要解决对应的资源消耗,对象的应用性能问题,是否还要考虑对象的可维护性,可扩展性。
假如要考虑这个特性,那么该如何实现呢?一般程序中会借助继承或组合实现这样的特性,但继承或组合就离不开耦合,如何降低这种耦合呢?
2.Spring 工程中的依赖注入?
Spring框架作为一个资源整合框架,为了降低类于类之间的耦合,提高其程序的可扩展性,推荐存在耦合时,
要尽量耦合于接口或工厂(我们现在项目中对象的创建底层是耦合了Spring的BeanFactory工厂).并由
spring框架完成具体值的注入(DI).
class A{}
implements IB{}
class B implements IB{}
class C extends B{}
class d implements IB{}
class A{
private final B b1 = new B();
private final B b2;
A(B b2){
this.b2=b2
}
public static void main(String[] args) {
new A(new B());
new A(new C());
}
3.Spring 工程中依赖注入的业务设计及实现
1.创建项目module
2.创建业务接口Cache
3.创建业务接口实现类SoftCache,WeakCache.
4.定义单元测试类CacheTest,并且耦合于Cache接口,然后由spring完成接口值的注入。
FAQ?
1.当@Autwire注解描述属性时,其依赖注入规则是怎样的?
当spring框架检测到由它管理的bean内部有属性使用了@Autowired注解描述,则会从spring
容器中按照属性类型查找对应的Bean对象(这个过程叫依赖查找-DL),假如只有一个则直接注入。
假如有多个,还会基于属性名与bean对象的名字进行匹配,假如有匹配的则直接注入,没有匹配则抛出异常(依赖注入异常),当然我们也可以借助@Qualifier注解配合@Autowired注解使用,指定要注入的bean的名字。
2.Spring 中的依赖注入(DI)是基于什么技术实现的?反射技术
3.Spring 学习过程中有一个设计思想,称之为IOC(控制反转),如何实现控制反转呢?可以借助DI
Bug分析:
1.NoUniqueBeanDefinitionException (非唯一bean的定义)
2…