文章目录
IOC的概念和原理
什么是IOC
- Spring–IOC(控制反转),创建和调用对象交给Spring管理
- 使用IOC的目的:为了降低耦合度
IOC底层原理
xml解析、工厂模式、反射
IOC接口
- IOC思想基于IOC容器完成,IOC底层就是对象工厂
- Spring提供的IOC容器实现的两种方式(两个接口):
a)BeanFactory:
IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用
特点:加载配置文件时候不会创建对象,在获取对象时才会创建对象。
b)ApplicationContext:
BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用
特点:加载配置文件时候就会把在配置文件对象进行创建。推荐使用!
3.ApplicationContext接口的实现类(具体根据API文档查看☺)
IOC容器–Bean管理操作
IOC操作Bean管理
a) Bean管理就是两个操作:(1)Spring创建对象;(2)Spring注入属性
b) Bean具体实现方式:(1)基于XML配置文件实现 (2)基于注解方式实现
基于XML配置文件创建对象
<!--1 配置User对象创建-->
<bean id="user" class="com.spring.User"></bean>
基于XML配置文件注入属性
DI—依赖注入(注入属性)
1. 通过set方法注入属性
创建Book类
//(1)传统方式: 创建类,定义属性和对应的set方法
public class Book {
//创建属性
private String bname;
//创建属性对应的set方法
public void setBname(String bname) {
this.bname = bname;
}
}
修改bean1.xml配置文件
<!--(2)spring方式: set方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book">
<!--使用property完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
<property name="bname" value="Hello"></property>
<property name="bauthor" value="World"></property>
</bean>
2. 通过有参构造注入属性
创建Orders类
//(1)传统方式:创建类,构建有参函数
public class Orders {
//属性
private String oname;
private String address;
//有参数构造
public Orders(String oname,String address) {
this.oname = oname;
this.address = address;
}
}
修改bean1.xml配置文件
<!--(2)spring方式:有参数构造注入属性-->
<bean id="orders" class="com.atguigu.spring5.Orders">
<constructor-arg name="oname" value="Hello"></constructor-arg>
<constructor-arg name="address" value="China!"></constructor-arg>
</bean>
3.p名称空间注入属性(了解即可)
<!--1、添加p名称空间在配置文件头部-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" <!--在这里添加一行p-->
<!--2、在bean标签进行属性注入(算是set方式注入的简化操作)-->
<bean id="book" class="com.atguigu.spring5.Book" p:bname="very" p:bauthor="good">
</bean>
4. 注入null值和特殊符号
<bean id="book" class="com.atguigu.spring5.Book">
<!--(1)null值-->
<property name="address">
<null/><!--属性里边添加一个null标签-->
</property>
<!--(2)特殊符号赋值-->
<!--属性值包含特殊符号
a 把<>进行转义 < >
b 把带特殊符号内容写到CDATA
-->
<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
</bean>