IOC详解

tech2022-11-01  119

IOC概念

什么是IOC:

控制反转,把对象创建和对象间的调用过程,交给Spring进行管理。使用IOC可以降低耦合度。IOC底层原理:XML解析,工厂模式,反射。

图解IOC底层原理:

IOC思想基于IOC容器完成的,IOC容器底层就是对象工厂 Spring提供IOC容器实现两种方式: 1.BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员使用。加载配置文件的时候不会去创建对象,在获取对象使用才去创建对象。 2.ApplictionContext:BeanFactory接口的子接口,提供更多更强大的功能,一般有开发人员使用,加载配置文件时候就会创建对象。

实现关系: 常用的实现类:

ClassPathXmlApplicationContext从类路径ClassPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。FileSystemXmlApplicationContex从指定的文件系统路径中找寻指定的XML配置文件找到并装载完成ApplicationContext的实例化工作。

DI

DI(Dependency Injection):依赖注入。DI就是在指IOC容器内实现的将依赖对象注入的概念

IOC与DI的关系:起始它们使用一个概念的不同角度描述。但是由于控制反转概念比较模糊,所以2004年又给出了新名字“依赖注入”。

IOC操作Bean管理

什么是Bean管理:Spring创建对象,Spring注入对象。 Bean管理有两种方式,XMl配置文件方式实现,在这里插入代码片基于注解方式实现 1.XML方式创建对象:

<bean id="user" class="com.gz.pojo.User"></bean>

注意:

在Spring配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象的创建。id属性:位置标识,class属性:全路径(包路径)创建对象的时候,默认执行无参构造方法完成对象的创建。

2.基于XML方式注入属性 (1.set方法注入:创建类,定义属性和对象的set方法 User类:

public class User { private String name; private Integer id; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { id = id; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", Id=" + id + '}'; } }

Spring配置文件: 使用property完成属性的注入:name:类中的属性名,value:向属性名中注入的值。

<property name="name" value="gz"></property> <property name="id" value="0"></property> </bean>

(2.使用有参构造器进行注入:创建类,定义属性对应有参构造方法。

有参构造器:

public User(String name, Integer id) { this.name = name; this.id = id; }

Spring配置文件:

<bean id="user" class="com.gz.pojo.User"> <constructor-arg name="name" value="gz"></constructor-arg> <constructor-arg name="id" value="0"></constructor-arg> </bean>

3.注入其他类型属性 (1.null值

<property name="address"> <null/> </property>

(2.属性值包含特殊符号

<>进行转义&lt;&gt;或者把特殊符号写入CDATA <property name="address"> <value> <![CDATA[<<南京>>]]></value> </property>
最新回复(0)