Spring源码系列(1)
1.什么是BeanDefinition
BeanDefinition是标签的内部表现形式,BeanDefiniton是bean属性的一中承载实体(通过BeanDefiniton的属性来控制bean对象)
BeanDefinition是Spring的核心概念
BeanDefinition表示Bean定义
Spring根据BeanDefinition来创建Bean对象
2.BeanDefinition中几个重要的属性
beanClass 、 Scope 、 isLazy 、 depend on 、primary 用来表示控制bean的类型
spring在创建Bean的过程中会根据此属性来实例化得到对象
Scope:
表示一个bean的作用域
Scope等于Singleton 表示这个bean就是一个单例的bean;
Scope等于prototype表示这个bean就是一个原型的bean;
#扩展
原型模式(深克隆、浅克隆)
isLazy:
表示一个bean是不是需要懒加载
懒加载的单例bean会在第一个getBean的时候,生成该Bean,非懒加载的bean会在启动spring容器过程中,直接生成好。
depend on:
表示有个bean在创建之前所依赖的其他bean,必须在创建好这个bean之前把它依赖的其他bean创建好;
primary:
表示一个bean是主bean,在spring中一个类型的可以有多个bean对象,在创建一个bean的时候,进行依赖注入的时候,如果中spring容器中找到多个可以注入的bean,此时会判断这些bean中是否存在一个主bean,如果找到,会直接把这个主bean直接注入到对象中;
initMethodName:
表示一个bean的初始化方法,一个bean的生命周期过程中有一个过程叫做初始化,Spring会在这个步骤中去调用bean的初始化方法,初始化逻辑由程序员自己控制,表示程序员可以对这个过程进行bean的加工。
3.@component 、@bean、 这些会被解析成为beanDefinition
4.BeanDefinition的使用
在标签中可以指定BeanDefinition中的属性
在注解中(@Component)下使用@注解的方式来使用
@Component@Scope@Primary@DependsOnpublic class Text {}