Bean

发布时间 2023-10-06 01:04:16作者: 小心每个错误

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的销毁方法