Spring Framework (二) -- IOC
作者:互联网
Spring Framework (二)
本篇博客的主要内容是介绍Spring框架中的一个核心:IOC。
1. 什么是IOC?
IoC:Inversion of Control,控制反转。是一种思想,即将创建对象的控制权交给外部环境(如:交给Spring框架)。
2. 为什么要有IOC?
传统创建对象或实例化的方式是通过关键字new来实现,这种方式存在的弊端是耦合度高。软件设计追求的是高内聚低耦合,因此提出了用IoC容器(Spring)来实例化对象。
IoC思想就是将对象的控制权交给IoC容器管理,在使用的时候直接向IoC容器要即可。
在Spring中用来实现IoC的载体就是IoC容器,实际上是Map,存放着各种对象。
3. 如何实现IOC?
Ioc核心思想就是把对象的控制权(包括创建和调用对象)交给IoC容器。
Spring框架中,如何创建一个对象?
- 第一步:在xml文件中利用bean标签配置创建的对象,bean标签中包括两个关键属性,分别是id和class。id指的是对象的唯一标识,class指的是类标识。
<bean id="对象标志" class="欲创建对象所属类的全限定名"></bean>
全限定名指的是:目标类编译后class文件所在位置
-
第二步:创建工厂类,工厂类中写一个静态方法来获取对象,解析xml文件,读取class属性值,得到目标类的全限定名。
-
第三步:用反射创建类的对象。
Spring中怎么实现IOC容器?
Spring中提供两种实现IOC容器的实现方式:
-
BeanFactory接口:Spring内部使用的接口,不提供给开发人员使用
特点:加载配置文件时不创建对象,获取对象时才会创建对象
-
ApplicationContext接口:BeanFactory子接口,由开发人员使用
特点:加载配置文件时就创建对象
ApplicationContext接口的两个实现类:
-
FileSystemXmlApplicationContext:构造器参数需要传入xml配置文件编译后的绝对路径
-
ClassPathXmlApplicationContext:构造器参数需要传入xml配置文件编译后的相对路径
-
//绝对路径
ApplicationContext ac = new FileSystemXmlApplicationContext("D:\\code\\spring-01\\target\\classes\\beans.xml");
//相对路径
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
【总结】控制反转是一种思想,是能够解决问题的一种可能的结果,而依赖注入(Dependency Injection)就是其最典型的实现方法。由第三方(我们称作IOC容器)来控制依赖,把他通过构造函数、属性或者工厂模式等方法,注入到类A内,这样就极大程度的对类A和类B进行了解耦。
IoC典型的实现方式叫做DI:Dependency Injection,依赖注入。
依赖:对象合作的其他对象
创建对象之后,给对象属性赋值需要使用依赖注入
4. 如何实现属性注入?
实现属性注入一般有两种方式:基于注解的注入属性和基于xml注入属性。
4.1 基于注解的注入属性
-
定义:使用Spring中的注解完成属性赋值
-
常用注解
@Component:相当于bean标签,用于创建对象
@Repository:用于持久层类创建对象
@Service:用于业务层类创建对象
@Controller:用于控制器类创建对象
@Value:给简单类型属性赋值,用于属性注入
@Autowired:引用类型属性注入(自动注入byType)
@Qualifier:与Autowired合用,属性自动注入,byName
@Resource:自动注入,支持byName和byType,默认是byName -
怎么利用注解注入属性?
Step 1 : 利用注解component创建对象
Step 2 : 组件扫描器扫描
4.2 基于xml的注入属性
基于xml的注入属性共有三种注入方式:set注入,构造注入以及自动注入。
-
set注入:Spring调用类的set方法,set方法中实现属性的赋值
- 注入简单类型(如:基本数据类型,String)
- 注入引用类型
[注入简单类型代码]
[注入引用类型代码]
-
构造注入:: Spring调用类的有参构造方法,在构造方法中完成赋值(<constructor - arg>标签)
-
自动注入
- 按名称注入(byName)
- 按类型注入(byType)
[按名称注入]
【注】自动注入允许引用类型属性不用ref来指明类型
[按类型注入]
参考资料
https://www.cnblogs.com/TSCCG/p/15363241.html
https://zhuanlan.zhihu.com/p/33492169
标签:xml,IoC,--,Spring,创建对象,注入,IOC,属性 来源: https://www.cnblogs.com/Claire-is-here/p/16444490.html