IOC

127 阅读2分钟

什么是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>