一、概念
什么是 IOC
(1)管制反转,把对象的创立和调用过程交给 Spring 进行治理
(2)应用目标:升高耦合度
底层原理
(1)xml 解析
(2)工厂模式
(3)反射
反射创建对象
class ObjectFactory{public satic Object getObject(){
String classvalue = class 属性值; //xml 解析
Class clazz = Class.forName(classValue);
return (Object)clazz.newInstance();}
}
IOC 接口
(1)BeanFactory:是 Spring 外部的应用接口【加载配置文件时不会创建对象,在获取对象时创立】
(2)ApplicationContext:BeanFactory 的子接口,提供更弱小的性能【加载配置文件时就会创建对象】
Ⅰ、ClassPathXmlApplicationContext(“src 下类门路 ”)
Ⅱ、FileSystemXmlApplicationContext(“ 系统盘门路 ”)
Bean 治理
(1)Spring 创建对象【反射形式创建对象时,默认采纳无参数构造方法】
(2)Spring 注入属性
基于 xml 形式
(1)创建对象
<!-- id: 实例化对象的惟一标识;class: 类的全门路 -->
<bean id="user" class="com.dk.entity.User"></bean>
(2)注入属性【依赖注入 DI-Dependence Injection】
<!-- id: 实例化对象的惟一标识;class: 类的全门路 -->
<bean id="user" class="com.dk.entity.User">
<!-- 调用 set 办法进行属性注入:name 示意属性名称,value 示意属性值 -->
<property name="name" value="LiHui"></property>
<property name="age" value="25"></property>
</bean>
<!-- 调用有参构造方法进行属性注入 -->
<bean id="user2" class="com.dk.entity.User">
<constructor-arg name="name" value="Zhang"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
</bean>
<!-- 级联注入 -->
<bean id="school" class="spring.service.ba01.school">
<property name="name" value="清华"/>
<property name="address" value="北京"/>
</bean>
<bean id="student" class="spring.service.ba01.student">
<property name="name" value="张三"/>
<property name="school" ref="school"/>
</bean>
<!-- 汇合属性注入 -->
<property name="list">
<list>
<value>a</value>
<value>b</value>
<value>c</value>
</list>
</property>
<property name="map">
<map>
<entry key="a" value="aaa"></entry>
<entry key="b" value="bbb"></entry>
</map>
</property>
<property name="set">
<set>
<value>1</value>
<value>2</value>
<value>1</value>
</set>
</property>
(3)获取 bean 对象
public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Object user = context.getBean("user");
System.out.println(user);
}