修真院_JAVA_TASK_1_PART_6

今天做了什么

根据昨天师兄给的建议,去查了IoC和DI。
IoC的解释我看的csdn的一篇博客,用墨攻作为例子解释解耦的由来,以及具体可能用到的操作。

一个第三方的容器,它帮助完成类的初始化与装配工作,让开发者从这些底层实现类的实例化、依赖关系装配等工作中脱离出来,专注于更有意义的业务逻辑开发工作。
Spring就是这样的一个容器,它通过配置文件或注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。
通过new XmlBeanFactory(“beans.xml”)等方式即可启动容器。在容器启动时,Spring根据配置文件的描述信息,自动实例化Bean并完成依赖关系的装配,从容器中即可返回准备就绪的Bean实例,后续可直接使用之。

spring作为第三方容器就像电影拍摄过程中的制片人或者类似统筹全局者。

在软件工程领域,依赖注入(Dependency Injection)是用于实现控制反转(Inversion of Control)的最常见的方式之一。

依赖注入的实现方式
1 构造函数注入(Contructor Injection)
2 setter注入
3 接口注入
依赖注入降低了依赖和被依赖类型间的耦合,在修改被依赖的类型实现时,不需要修改依赖类型的实现,同时,对于依赖类型的测试,可以更方便的使用mocking object替代原有的被依赖类型,以达到对依赖对象独立进行单元测试的目的。

最后需要注意的是,依赖注入只是控制反转的一种实现方式。控制反转还有一种常见的实现方式称为依赖查找。

java的bean是通过统一规范可以设置对象的值。
而在spring中,应该是根据xml文件进行创建setter和getter。

1.属性注入方法
属性注入要求bean提供一个默认的构造函数,并且得为需要注入的属性提供set方法。
这里写图片描述
在spring的xml文件中设置属性
2.构造函数注入方法
使用构造函数注入的前提是:bean必须提供带参的构造函数。

  • 按类型匹配入参
    这里写图片描述
    那么当bean中的构造函数的多个参数类型一样时,按照类型匹配入参的这种方式便会产生混淆,那么我们便来看一看另外一种方式:按照索引匹配入参。
  • 按索引匹配入参
    这里写图片描述
    在属性注入时,Spring按java bean 的规范确定配置属性和对应的setter方法,并使用java 反射机制调用属性的setter方法完成属性注入。但java反射机制并不会记住构造函数的入参名。因此我们不能通过指定构造函数的入参名称来进行构造函数的配置,所以我们只能通过入参的类型及其索引来间接的完成构造函数的属性注入。
  • 联合使用类型和索引匹配入参
    这里写图片描述
    可以看到其实重点在于第三个入参的类型,所以我们在配置文件中对其指定了索引和类型,这样便使得Spring可以知道对那个构造函数进行参数注入了。
    注意:
    假如我们的配置文件中存在歧义问题,Spring容器是可以正常启动的。并不会报错,他将随机采用一个匹配的构造函数实例化bean。而随机选择的构造函数可能并不是用户所需要的,所以我们在编程时必须小心避免出现这种歧义情况的出现。
  • 通过自身类型反射匹配入参
    这里写图片描述
    以上的几种方法都可以实现构造函数参数的注入,但是为了避免问题的发生,建议还是使用显示的index和type来配置构造函数的入参信息。

3.工厂方法注入方法

工厂方法是应用中被经常使用的设计模式,也是控制反转和单实例设计思想的主要实现方法。
工厂类负责创建一个或多个工厂类实例,工厂类方法一般以接口或抽象类变量的形式返回目标类实例。
工厂类对外屏蔽了目标类的实例化步骤,调用者甚至根本不用指定具体的目标类是什么。
由于Spring容器以框架的方法提供工厂方法的功能,并以透明的方式开放给开发者。因此很少需要手工编写工程方法。但在一些遗留系统或第三方类库中还是会碰到工厂方法,此时便可以使用Spring工厂注入的方法来进行Spring的注入。
这里写图片描述
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值