Bean
什么是Bean
在IoC容器中创建的类实例统称为Bean(Spring中使用Bean来表示应用组件)
Spring通过IoC容器(实现IoC)来管理Bean的生命周期 通过DI来自动完成Bean与Bean之间的依赖关系
装配Bean
装配Bean就是在ioc容器中完成创建Bean和确定Bean和Bean之间的依赖关系(依赖注入)
Spring提供了三种装配方式:基于XML,基于注解,基于Java类配置
构造器注入Bean
Spring loC容器构造器注入Bean使用元素,使Spring loC容器在实例化Bean时可以不调用默认构造器,而是调用有参构造器
Bean的作用域
在Spring loC容器中,所有的Bean默认都是单例,当loC容器装配一个Bean时通过调用容器getBean()方法,总是返回Bean的同-一个实例( Bean的默认作用域为单例模式,singleton)
singleton | 在每一个Spring loC容器中,一个Bean定义只有一一个对象实例(默认) |
---|---|
prototype | 允许Bean的定义可以被实例化任意次( 每次调用都创建一一个Bean实例) |
request | 在一-次HTTP请求中,每个Bean定义对应一个实例(仅限于SpringMYC中) |
session | 在一次HTTP会话中,每个Bean定义对应一一个实例(仅限于SpringMVC中) |
global-session | 在一次HTTP全局会话中,每个Bean定义对应一一个实例(仅限于Portlet中) |
注解装配Bean
使用注解自动装配与在XML配置中使用autowire属性自动装配并没有太大差别(Spring loC容器默认 禁用注解装配Bean)
●@Autowired 注解:可以用于标注setter 方法,Spring 就会尝试对该方法执行byType自动装 配;还可以用于标注需要自动装配Bean引用的任意方法;还可以用于标注构造器当创建Bean 时,即使在XML文件中没有使用元素配置Bean,该构造器也需要进行自动装配;还可以用于直接 标注属性,则可以删除setter方法(@Autowire 注解甚至不受限于private关键字,仍然可以被自 动装配)
●@Resource注解:与@Autowired完全相同,唯- -区别是默认安装byName装配Bean,失败则 按照byType装配Bean
●@Qualifer注解:如果Spring有多个适合自动装配的Bean, @Autowired注解由于无法选择哪一 个Bean才是真正需要的,这时Spring将自动装配失败并抛出异常,这种情况下可以使用@Qualifier注解来明确指定需要自动装配的Bean
●@Scope注解:可以用于设置Bean的作用域
●@Value注解:可以用于属性、方法和构造器,作用是设置Bean的基本类型属性值
●@PostConstructor 注解:可以用于设置Bean的初始化方法
●@PreDestroy 注解:可以用于设置Bean的销毁方法