IOC介绍
控制反转,把对象的创建和调用的过程,交给spring进行管理。
使用IOC目的:为了耦合度降低。
IOC底层原理
1)xml解析
2)工厂模式
3)反射
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
spring提供IOC容器实现两种方式:(两个接口)
1)BeanFactory:IOC容器基本实现,是spring内部使用接口,不提供开发人员进行使用。
加载xml配置文件时候不会创建对象,在获取对象(使用对象)才去创建对象。
//1.加载spring的配置文件 BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml"); //2.获取配置创建的对象 User user = context.getBean("user", User.class);
2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般是面向开发人员使用的。
加载xml配置文件时候就会把在配置文件对象进行创建。
//1.加载spring的配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); //2.获取配置创建的对象 User user = context.getBean("user", User.class);
ApplicationContext接口的实现类
Bean管理
1.spring创建对象
2.spring注入属性
Bean管理操作两种方式:
1.基于xml配置文件方式实现
创建对象
- 在spring配置文件中,使用bean标签,标签里面里面添加对应属性,就可以实现对象创建。
- bean标签有很多属性,介绍常用的属性:
id属性:唯一标识
class属性:类全路径,包类路径
- 创建对象时候,默认执行无参数构造方法完成对象创建
注入属性
DI 依赖注入,就是注入属性。
- 通过set方法注入
- 有参构造方法注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.xkj.org.User">
<property name="name" value="王小军"></property>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.xkj.org.User">
<constructor-arg name="name" value="张晓军"></constructor-arg>
</bean>
</beans>
给对象属性设置一个null值
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.xkj.org.User">
<property name="name">
<null/>
</property>
</bean>
</beans>
属性值中有特殊字符处理
解决方式一:使用< >替代
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.xkj.org.User">
<property name="name" value="<<王大伟>>"></property>
</bean>
</beans>
解决方式二:<![CDATA[<<王大伟>>]]>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.xkj.org.User">
<property name="name">
<value><![CDATA[<<王大军>>]]]></value>
</property>
</bean>
</beans>