什么是IOC:把对象创建和对象之间的调用过程交给spring进行管理,降低耦合度
IOC底层原理
- xml解析
- 工厂模式
- 反射
ioc接口
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
Spring提供了IOC容器实现的两种方式(两个接口)
-
BeanFactory
IOC容器中最基本的实现,Spring内部的使用接口,不提供给开发人员使用。
-
使用BeanFactory加载文件时不会创建对象,在获取对象时才会创建对象
-
-
ApplcationContext
是BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员进行使用。
在加载配置文件时就会把你配置文件中的对象创建
IOC操作Bean管理
-
什么是Bean管理
Spring创建对象
Spring注入属性
Spring有两种Bean,一种是普通Bean另外一个种是工厂Bean(FactoryBean)
-
普通Bean:在配置文件中定义Bean类型就是返回值
-
工厂Bean:在配置文件定义bean类型可以和返回值类型不同
第一步: 创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步: 实现接口里面的方法,在实现的方法中定义返回的bean类型
Bean的作用域
-
在Spring中,可以设置创建Bean实例是单实例还是多实例
-
在Spring中,默认情况下,bean是单实例。
-
如何设置单实例还是多实例
在Spring配置文件bean标签中有scope属性,用以设置单实例还是多实例
scope属性值: 默认singlton 表示是单实例对象,prototype表示是多实例对象。
scope值为singleton时,在加载配置文件时就创建对象
scope值为prototype时,不是在加载Spring配置文件时创建对象,在调用getBean 方法时创建多实例对象。
Bean的生命周期
-
生命周期
从对象创建到对象销毁的过程
-
bean生命周期
(1)通过构造器创建bean实例(无参构造) (2)为bean的属性设置值和对其他bean引用(调用set方法) //这里 有一步 会把bean实例传递给后置处理器 (3)调用bean的初始化的方法(需要进行配置) //这里 有一步 会把bean实例传递给后置处理器 (4)bean可以使用(对象获取到了) (5)当容器关闭时,调用bean的销毁方法(销毁的方法需要进行配置) (6)bean的后置处理器
创建后置处理器
1创建一个类,实现BeanPostProsessor接口
// 1 继承接口
public class MyBean implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前--执行的方法");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之后--执行的方法");
return bean;
}
}
注册到xml文件中
<!--配置后置处理器之后,会给所有的bean实例都加上后置处理器-->
<bean id="myBeanPost" class="com.csy.spring1.bean.MyBean"></bean>