Spring提供的Bean作用域,生命周期,自动装配的限制和相关注解
以下为Spring提供了哪些Bean的作用域
答:
singleton:Bean以单例的方式存在(IoC容器中仅存在该Bean的唯一实例)。
prototype:每次从容器中获取Bean的实例时,都会返回一个新的实例(原型模式)。
request:每次HTTP请求都会创建新的实例,该作用域仅适用于WebApplicationContext环境。
session:同一个HTTP会话共享一个Bean的实例,不同的HTTP会话使用不同的Bean实例,
该作用域仅适用于WebApplicationContext环境。
globalSession:同一个全局会话共享一个Bean的实例,一般应用于Portlet应用中。
以下为Spring框架中Bean的生命周期?
1)Spring IoC容器找到关于Bean的定义并实例化该Bean。
2)Spring IoC容器对Bean进行依赖注入。
3)如果Bean实现了BeanNameAware接口,则将该Bean的id传给setBeanName方法。
4)如果Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。
5)如果Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。
6)如果Bean实现了InitializingBean接口,则调用其afterPropertySet方法。
7)如果有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。
8)当销毁Bean实例时,如果Bean实现了DisposableBean接口,则调用其destroy方法
Spring中的自动装配有哪些限制?
1)如果使用了构造器注入或者setter注入,那么将覆盖自动装配的依赖关系。
2)基本数据类型的值、字符串字面量、类字面量无法使用自动装配来注入。
3)有先考虑使用显式的装配来进行更精确的依赖注入而不是使用自动装配。
自动装配相关的注解有哪些?
1)@Required:该依赖关系必须装配(手动或自动装配),否则将抛出BeanInitializationException异常。
2)@Autowired:自动装配,默认按类型进行自动装配。
3)@Qualifier:如果按类型自动装配时有不止一个匹配的类型,那么可以使用该注解指定名字来消除歧义。