解析:
当定义一个<bean> 在 Spring里,我们还能给这个 bean声明一个作用域。它可以通过 bean 定
义中的 scope 属性来定义。如,当 Spring 要在需要的时候每次生产一个新的 bean 实例,bean
的 scope 属性被指定为 prototype。另一方面,一个 bean 每次使用的时候必须返回同一个实
例,这个 bean 的 scope 属性 必须设为 singleton。
解释 Spring 支持的几种 bean 的作用域
解析:
Spring 框架支持以下五种 bean 的作用域:
singleton : bean 在每个 Spring ioc 容器中只有一个实例。
prototype:一个 bean 的定义可以有多个实例。
request:每 次 http 请求 都会创建 一个 bean,该 作用域仅 在基于 web 的 Spring
ApplicationContext情形下有效。
session:在一个 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的
Spring ApplicationContext 情形下有效。
global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅
在基于 web 的 Spring ApplicationContext 情形下有效。
缺省的 Spring bean 的作用域是 Singleton。
Spring 框架中的单例 bean 是线程安全的吗?
解析:
不,Spring 框架中的单例 bean 不是线程安全的。
解析:
Spring 容器 从 XML 文件中读取 bean 的定义,并实例化 bean。
Spring 根据 bean 的定义填充所有的属性。
如果 bean 实现了 BeanNameAware 接口,Spring 传递 bean 的 ID 到 setBeanName 方法。
如果 Bean 实现了 BeanFactoryAware 接口, Spring 传递 beanfactory 给 setBeanFactory 方
法。
如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()
方法内调用它们。
如果 bean 实现 IntializingBean 了,调用它的 afterPropertySet 方法,如果 bean 声明了初始化
方法,调用此初始化方法。
如果有 BeanPostProcessors 和 bean 关联,这些 bean 的 postProcessAfterInitialization() 方法
将被调用。
如果 bean 实现了 DisposableBean,它将调用 destroy()方法。
哪些是重要的 bean 生命周期方法? 你能重载它们吗?
解析:
有两个重要的 bean 生命周期方法,第一个是 setup ,它是在容器加载 bean 的时候被调用。
第二个方法是 teardown 它是在容器卸载类的时候被调用。
The bean 标签有两个重要的属性(init-method 和 destroy-method)。用它们你可以自己定制
初始化和注销方法。它们也有相应的注解(@PostConstruct 和@PreDestroy)。