Spring的IoC和DI
一、搭建spring
1.导包
2.创建配置文件ApplicationContext.xml
3.在配置文件(xml/容器)中创建bean对象
<bean id="" class=""></bean>
二.IoC控制反转
将控制对象的权限交给第三方(Spring)
IoC底层实现:工厂–反射–xml
三.IoC实现
- 配置
<bean>
- Spring工厂获取
BeanFactory 的子接口ApplicationContext
ApplicationContext ac = new ClassPathXmlApplicationContext类路径下获取对应的xml配置
ApplicationContext ac = new FileSystemXmlApplicationContext文件系统中查找 - bean的获取方式getBean()
- id/name
- class UserDaoImpl.class
- id+class
- bean的实例化方式
- 普通构造实例化
- 静态工厂实例化
<bean id="calendar" class="java.util.Calendar" factory-method="getInstance"></bean>
静态工厂方法必须是用static修饰的
factory-method:静态工厂方法
等价于:Calendar calendar =Calendar.getInstance(); - 实例工厂实例化
<bean id="carFactory" class="factory.CarFactory"></bean>
<bean id="car" factory-bean="carFactory" factory-method="getCar"></bean>
需要先进行实例化工厂
在调用工厂的实例方法获取对象
- bean对象生命周期和作用域
<bean id="userDao1" class="dao.impl.UserDaoImpl"scope="singleton" init-method="init" destroy-method="destory" lazy-init="true"></bean>
- 作用域
a.单例 singleton 默认
b.原型(多例) prototype - 生命周期
a.init-method:初始化方法
b.destroy-method:销毁时调用的方法 - 延迟加载
前提:是单例
lazy-init =“ture”,为true表示单例对象不随容器创建,在第一次被调用时创建
- 作用域
三.DI 依赖注入
- 依赖注入:
spring框架的核心,动态的将依赖的对象注入到Bean组件中 - DI的三种注入方式
- setter注入 调用setXxx()方法 name=“setXxx” value=""
<bean id="person1" class="entity.Person" lazy-init="true">
<property name="name" value="tom"></property>
<property name="age" value="20"></property>
</bean>
- constructor注入 调用构造方法 name/index赋值
<bean id="person2" class="entity.Person" lazy-init="true">
<constructor-arg name="name" value="jack"></constructor-arg>
<constructor-arg name="age" value="22"></constructor-arg>
</bean>
- 集合注入
- setter注入 调用setXxx()方法 name=“setXxx” value=""