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实例,bean的 scope属性被指定为 prototype。另一方面,一个bean 每次使用的时候必须返回同一个实例,这个bean 的scope 属性 必须设为singleton。
4. Spring bean 的作用域有几种
Spring 框架支持以下五种bean 的作用域:
a) singleton : bean在每个 Spring ioc容器中只有一个实例。
b) prototype:一个bean 的定义可以有多个实例。
c) request:每次http 请求都会创建一个bean,该作用域仅在基于web 的Spring
ApplicationContext 情形下有效。
d) session:在一个HTTP Session 中,一个 bean定义对应一个实例。该作用域仅在基
于 web的 Spring ApplicationContext情形下有效。
e) global-session:在一个全局的HTTP Session 中,一个 bean定义对应一个实例。该
作用域仅在基于 web的 Spring ApplicationContext情形下有效。
缺省的 Spring bean的作用域是 Singleton.
5. Spring 框架中的单例bean 是线程安全的吗?
不一定,Spring框架中的单例 bean不是线程安全的。
6. Spring bean的生命周期。(已在另外一篇中详细说明)
以 BeanFactory为例,说明一个 Bean的生命周期活动第一步: bean的建立
从配置文件中读取 bean文件,生成各个实例第二步: Setter注入
执行 Bean的属性依赖注入
第三步: BeanNameAware的 setBeanName()
如果 Bean类实现了 org.springframework.beans.factory.BeanNameAware接口,则执行其 setBeanName()方法。
第四步: BeanFactoryAware的 setBeanFactory()
如果 Bean类实现了 org.springframework.beans.factory.BeanFactoryAware接口,则
执行其 setBeanFactory()方法
第五步: BeanPostProcessors的 processBeforeInitialization()
容器中如果有实现 org.springframework.beans.factory.BeanPostProcessors接口的实
例,则任何 Bean在初始化之前都会执行这个实例的 processBeforeInitialization()方法第六步: InitializingBean 的 afterPropertiesSet()
如果 Bean类实现了 org.springframework.beans.factory.InitializingBean接口,则执行其 afterPropertiesSet()方法
Bean 定义文件中定义init-method
在 Bean定义文件中使用“init-method”属性设定方法名称
第七步: BeanPostProcessors的 processAfterInitialization()
容器中如果有实现 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容器在配置文件中发现 bean的 autowire属性
被设置成 byname,之后容器试图匹配、装配和该bean 的属性具有相同名字的bean。byType::通过参数类型自动装配,Spring容器在配置文件中发现 bean的 autowire属性被设置成 byType,之后容器试图匹配、装配和该bean 的属性具有相同类型的bean。如果
有多个 bean符合条件,则抛出错误。
constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带
参数的构造器参数类型,将会抛出异常。
autodetect:首先尝试使用constructor 来自动装配,如果无法工作,则使用 byType方
式。
12. 自动装配有哪些局限性
重写: 你仍需用 <constructor-arg>和<property> 配置来定义依赖,意味着总要重写自动装配。
基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。
13. 你可以在Spring 中注入一个null 和一个空字符串吗?
可以。
- java bean,spring bean
- Spring Bean
- spring bean
- spring bean
- Spring bean
- spring & bean
- Spring Bean
- spring bean
- Spring Bean
- Spring bean
- Spring bean
- Spring Bean
- Spring Bean
- Spring bean
- Spring Bean
- spring bean
- spring bean
- Spring Bean
- 关于 RxJava 最友好的文章—— RxJava 2.0 全新来袭
- Android 关闭应用程序的方法
- 向pcd文件写入点云数据
- Java基础学习总结——super关键字
- 导出excel时需要在单元格进行强制换行2003与2007方法一样
- Spring bean
- angular2.0如何自定义管道?
- JavaScript中iframe获取其他frame中的元素值
- usaco2.4.4 Bessie Come Home
- HTTPS和HTTP的区别
- VS2013 编译XPdf
- 渗透测试教程(基础篇)-2
- 使用maven编译spark源码
- NP-Complete Stingy Set