Spring → 04:Bean

Posted balmylee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring → 04:Bean相关的知识,希望对你有一定的参考价值。

一、Bean概念

Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。

Spring 容器会自动完成@bean对象的实例化。

创建应用对象之间的协作关系的行为称为:装配(wiring),这就是依赖注入的本质。

1.1、BeanFactory与工厂模式创建Bean

1.2、ApplicationContext与容器组件及主要实现类

二、Bean基础知识

  2.1、id、name、class、scope属性介绍

2.2、depends-on、abstract、parent属性介绍

2.3、Spring bean 何时初始化

  1、如果bean的scope是singleton,lazy-init为false(默认)则在ApplicationContext;启动的时候实例化bean,如果为true,则在第一次使用该bean的时候实例化
  2、如果bean的scope是其它类型,则在第一次使用的时候进行实例化

2.4、Spring bean作用域

1、singleton 单例(默认),这里的单例跟设计模式里面的单例模式不一样,由容器来保证这种类型的bean只存在一个共享实例。
2、prototy 原型,每次使用时产生一个新的实例
3、request 对每次http请求产生一个新的实例
4、session 对每次http session产生一个新的实例
5、global session 每个全局的http session对应一个bean实例

三、Bean的生命周期

技术图片

 

3.1、展示Bean生命周期的各个阶段

  1. 实例化一个Bean,也就是我们通常说的new
  2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入
  3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID。实现该接口可以获取当前Bean的名字。
  4. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)。实现该接口可以获取BeanFactory对象。
  5. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法
  6. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术。
  7. 如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法
  8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法
  注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例
  9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法
  10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

3.2、自定义容器组件模拟Spring Bean的IoC

 

以上是关于Spring → 04:Bean的主要内容,如果未能解决你的问题,请参考以下文章

Spring

Spring注解

Spring注解

管理Bean

Spring 中常用的注解

Spring 中常用的注解