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.属性值包含特殊符号
- <>进行转义<;>;
- 或者把特殊符号写入CDATA
<property name="address">
<value> <![CDATA[<<南京>>]]></value>
</property>