目录
BeanDefinition里面有哪些属性?
BeanDefinition是如何存放的?
前言
在spring 中,bean要注入到IOC容器里,每个bean对象都通过BeanDefinition进行定义的。此博客带您了解BeanDefinition。
抛砖引玉
单词含义
BeanDefinition:
Bean的释义;解释;定义;BeanDefinition是什么?
描述一个bean的全部信息,比如他的class类型、Bean的作用域、是否懒加载…
BeanDefinition在哪个包里面?
在spring-beans\org\springframework\beans\factory\config包下
如果您想要下载spring源码进行研究Spring的可以看博主的另一篇博客:
BeanDefinition里面有哪些属性?
BeanClass:表示一个bean的类型,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注入给属性。
factoryMethodName:表示指定工厂方法,将在指定的工厂bean上调用或者作为本地bean类上的静态方法调用
initMethodName:表示一个bean的初始化方法,一个bean的生命周期过程中有一个步骤叫初始化,Spring会在这个步骤中去调用bean的初始化方法,初始化逻辑由程序员自己控制,表示程序员可以自定义逻辑对bean进行加工
BeanDefinition是如何存放的?
Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256)
当Bean注册完成后,会在spring容器中把扫描到的beanDefinition存放到beanDefinitionMap中,方便后续的使用。
BeanDefinition被读取的常见读取器
AnnotatedBeanDefinitionReader:解析类上的注解,包含某些注解的时候会成为Bean。
- XmlBeanDefinitionReader:可以解析xml文件中的标签。
- ClassPathBeanDefinitionScanner:扫描包路径的读取器。