什么是 BeanDefinition

来自姬鸿昌的知识库
跳到导航 跳到搜索

BeanDefinition 表示 Bean 定义,

Spring 根据 BeanDefinition 来创建 Bean 对象,

BeanDefinition 有很多的属性用来描述 Bean 对象。

BeanDefinition 是 Spring 中非常核心的概念。

BeanDefinition 中重要的属性

beanClass

表示一个 bean 的类型,比如:UserService.class、OrderService.class,Spring 在创建 Bean 的过程中会根据此属性来实例化得到对象。

scope

表示一个 bean 的作用域,比如:

scope 等于 singleton,该 bean 就是一个单例 bean;

scope 等于 prototype,该 bean 就是一个原型 bean。

isLazy

表示一个 bean 是不是需要懒加载,原型 bean 的 isLazy 属性不起作用,

懒加载的单例 bean,会在第一次 getBean 的时候生成该 bean,

非懒加载的单例 bean 则会在 Spring 启动过程中直接生成好。

dependsOn

表示一个 bean 在创建之前所依赖的其他 bean,在一个 bean 创建之前,它所依赖的这些 bean 得先全部创建好。

primary

表示一个 bean 是主 bean,在 Spring 中一个类型可以有多个 bean 对象。

在进行依赖注入时,如果根据类型找到了多个 bean,此时会判断这些 bean 中是否存在一个主 bean,如果存在,则直接将这个 bean 注入给属性。

initMethodName

表示一个 bean 的初始化方法,一个 bean 的生命周期过程中有一个步骤叫初始化,

Spring 会在这个步骤中去调用 bean 的初始化方法,初始化逻辑由程序员自己控制,表示程序员可以自定义逻辑对 bean 进行加工。

其他

@Component、@Bean、<bean/>都会解析为 BeanDefinition。