Spring bean

来源:互联网 发布:工控软件 编辑:程序博客网 时间:2024/06/01 10:29

1. 什么是Spring beans?
Springbeans 就是交由Spring管理的java对象。它们被SpringIOC容器初始化,装配,

和管理。

2. 怎样定义一个bean一种通过xml 配置,一种通过注解

3. 你怎样定义bean 的作用域?
当定义一个<bean>Spring里,我们还能给这个 bean声明一个作用域。它可以通过 bean定义中的 scope属性来定义。如,当 Spring要在需要的时候每次生产一个新的 bean实例,beanscope属性被指定为 prototype。另一方面,一个bean 每次使用的时候必须返回同一个实例,这个bean scope 属性 必须设为singleton

4. Spring bean 的作用域有几种

Spring 框架支持以下五种bean 的作用域:

  1. a)  singleton : bean在每个 Spring ioc容器中只有一个实例。

  2. b)  prototype:一个bean 的定义可以有多个实例。

  3. c)  request:每次http 请求都会创建一个bean,该作用域仅在基于web Spring

    ApplicationContext 情形下有效。

  4. d)  session:在一个HTTP Session 中,一个 bean定义对应一个实例。该作用域仅在基

    webSpring ApplicationContext情形下有效。

  5. e)  global-session:在一个全局的HTTP Session 中,一个 bean定义对应一个实例。该

    作用域仅在基于 webSpring ApplicationContext情形下有效。

缺省的 Spring bean的作用域是 Singleton.

5. Spring 框架中的单例bean 是线程安全的吗?

不一定,Spring框架中的单例 bean不是线程安全的。

6. Spring bean的生命周期。(已在另外一篇中详细说明)

BeanFactory为例,说明一个 Bean的生命周期活动第一步: bean的建立

从配置文件中读取 bean文件,生成各个实例第二步: Setter注入

执行 Bean的属性依赖注入
第三步
: BeanNameAwaresetBeanName()

如果 Bean类实现了 org.springframework.beans.factory.BeanNameAware接口,则执行其 setBeanName()方法。

第四步: BeanFactoryAwaresetBeanFactory()
如果 Bean类实现了 org.springframework.beans.factory.BeanFactoryAware接口,则


执行其 setBeanFactory()方法 

第五步: BeanPostProcessorsprocessBeforeInitialization()
容器中如果有实现 org.springframework.beans.factory.BeanPostProcessors接口的实

例,则任何 Bean在初始化之前都会执行这个实例的 processBeforeInitialization()方法第六步: InitializingBean afterPropertiesSet()

如果 Bean类实现了 org.springframework.beans.factory.InitializingBean接口,则执行其 afterPropertiesSet()方法

Bean 定义文件中定义init-method
Bean定义文件中使用“init-method”属性设定方法名称

第七步: BeanPostProcessorsprocessAfterInitialization()
容器中如果有实现 org.springframework.beans.factory.BeanPostProcessors接口的实

例,则任何 Bean在初始化之前都会执行这个实例的 processAfterInitialization()方法第八步: DisposableBean destroy()

在容器关闭时,如果 Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的 destroy()方法Bean定义文件中定义 destroy-method

在容器关闭时,可以在 Bean定义文件中使用“destory-method”定义的方法 


7. 什么是Spring 的内部bean?

当一个 bean仅被用作另一个 bean的属性时,它能被声明为一个内部 bean,为了定义inner bean,在Spring 的 基于XML 的 配置元数据中,可以在<property/><constructor-arg/>元素内使用<bean/>元素,内部 bean通常是匿名的,它们的 Scope一般是 prototype

8. Spring 中如何注入一个java 集合?

<list>类型用于注入一列值,允许有相同的值。
<set> 类型用于注入一组值,不允许有相同的值。
<map> 类型用于注入一组键值对,键和值都可以为任意类型。<props>类型用于注入一组键值对,键和值都只能为String 类型。 

9. 什么是bean 装配?

装配,或 bean装配是指在 Spring容器中把 bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起。

10. 什么是bean 的自动装配?
Spring 容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>

<property>配置,能通过Bean 工厂自动处理bean 之间的协作。

11. 解释不同方式的自动装配

有五种自动装配的方式,可以用来指导 Spring容器用自动装配方式来进行依赖注入。no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。byName:通过参数名 自动装配,Spring容器在配置文件中发现 beanautowire属性

被设置成 byname,之后容器试图匹配、装配和该bean 的属性具有相同名字的beanbyType::通过参数类型自动装配,Spring容器在配置文件中发现 beanautowire属性被设置成 byType,之后容器试图匹配、装配和该bean 的属性具有相同类型的bean。如果

有多个 bean符合条件,则抛出错误。
constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带

参数的构造器参数类型,将会抛出异常。
autodetect:首先尝试使用constructor 来自动装配,如果无法工作,则使用 byType

式。
12. 自动装配有哪些局限性

重写: 你仍需用 <constructor-arg><property> 配置来定义依赖,意味着总要重写自动装配。

基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

13. 你可以在Spring 中注入一个null 和一个空字符串吗?

可以。 




0 0