SpringIOC
一、IOC原理
通过配置文件描述Bean及Bean之间的依赖关系,利用java语言的反射功能实例化Bean,并建立Bean之间的依赖关系。
Spring启动时读取应用程序提供的Bean配置信息,Spring容器中生成一份相应的Bean配置注册表。根据注册表实例化Bean
Bean缓存池为HashMap实现。
二、IOC的实现
IOC的实现是BeanFactory用了工厂设计模式思想,当时BeanFactory面向的是Spring本身,我们实际开发中,直接使用ApplicationContext。
三、Spring Bean作用域
Bean定义了5种作用域分别为singleton(单例)、prototype(原型)、request、session和global session
在spring中使用xml文件配置
1、singleton:单例模式,Spring IOC容器中只会存在一个共享的bean实例,无论多少个Bean引用他,始终指向同一个对象。该模式在多线程下是不安全的。在
2、prototype:原型模式,每次使用是创建。
每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 singleton 全局只有一个对象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。
4、session
在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请求则会创建新的实例,该 bean 实例仅在当前 Session 内有效。同 Http 请求相同,每一次session 请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的 session 请求内有效,请求结束,则实例将被销毁
四、IOC 依赖注入
五、spring上下文
六、Bean实例生命周期的执行过程如下:
-
Spring对bean进行实例化,默认bean是单例;
-
Spring对bean进行依赖注入;
-
如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;
-
如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;
-
如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
-
如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
-
如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;
-
如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
-
此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
-
若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;