BeanDefinition
BeanDefinition是用来描述一个Bean的,表示Bean的定义
scope
singleton
单例Bean
在Spring容器中,一个beanName只对应一个Bean对象
prototype
原型Bean
在Spring容器中,每次通过beanName获取的都是新的Bean对象
request
一个请求中,一个beanName只对应一个Bean对象
session
一个Session中,一个beanName只对应一个Bean对象
application
一个应用中,一个beanName只对应一个Bean对象
isLazy
是不是一个懒加载的Bean
单例懒加载Bean
非懒加载的单例Bean是在Spring启动的时候创建的
懒加载的单例Bean不是在Spring启动的时候创建的,而是在第一次获取Bean时创建的
@Lazy
autowire<br>
自动装配模式
constructor<br>
通过类中的构造方法进行自动装配
涉及到构造方法推断
byType<br>
通过类中的set方法的参数类型进行自动装配
byName
通过类中的set方法的名字进行自动装配
注意和@Autowired注解的区别
autowireCandidate<br>
当前Bean是不是一个自动装配候选者
表示当前Bean能不能自动注入给其他Bean,默认为true,如果为false,表示当前这个Bean不能自动注入给其他Bean
primary<br>
主Bean
在进行自动注入时,通过属性类型,或方法参数类型可能会找到多个Bean,如果这多个Bean中存在一个主Bean,那么就直接把这个主Bean注入给属性或方法,如果存在多个主Bean,则会报错
initMethodName
初始化方法
Spring在创建Bean的过程中会调用初始化方法
destroyMethodName
销毁方法
Spring在销毁Bean的过程中会调用销毁方法
constructorArgumentValues
构造方法参数值
可以通过BeanDefinition中的这个属性来给构造方法传递值
propertyValues
属性值
可以通过BeanDefinition中的这个属性来给Bean的某些属性赋值
factoryBeanName
一个Bean,可以通过另外一个Bean的某个方法来创建,这个属性就是指向另外那个Bean的beanName
factoryMethodName
一个Bean,可以通过另外一个Bean的某个方法来创建,这个属性就是另外那个Bean中的某个方法名字
BeanFactory
Bean工厂,可以根据某个bean的名字、或类型、或别名获取某个Bean对象
BeanDefinitionRegistry<br>
可以注册、保存、移除、获取某个BeanDefinition
SingletonBeanRegistry<br>
可以直接注册、获取某个单例Bean
ListableBeanFactory
在BeanFactory的基础上,增加了其他功能,可以获取所有BeanDefinition的beanNames,可以根据某个类型获取对应的beanNames,可以根据某个类型获取{类型:对应的Bean}的映射关系
HierarchicalBeanFactory
在BeanFactory的基础上,添加了获取父BeanFactory的功能
<span style="font-size: 15px; color: rgb(64, 64, 64); line-height: 1.74; letter-spacing: 0.008em; outline-style: none; overflow-wrap: break-word;">ConfigurableBeanFactory</span>
在HierarchicalBeanFactory和SingletonBeanRegistry的基础上,添加了设置父BeanFactory、类加载器(表示可以指定某个类加载器进行类的加载)、设置Spring EL表达式解析器(表示该BeanFactory可以解析EL表达式)、设置类型转化服务(表示该BeanFactory可以进行类型转化)、可以添加BeanPostProcessor(表示该BeanFactory支持Bean的后置处理器),可以合并BeanDefinition,可以销毁某个Bean等等功能
AutowireCapableBeanFactory
是直接继承了BeanFactory,在BeanFactory的基础上,支持在创建Bean的过程中能对Bean进行自动装配
AbstractBeanFactory<br>
实现了ConfigurableBeanFactory接口,继承了FactoryBeanRegistrySupport,这个BeanFactory的功能已经很全面了,但是不能自动装配和获取beanNames
ConfigurableListableBeanFactory
继承了ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory
AbstractAutowireCapableBeanFactory
继承了AbstractBeanFactory,实现了AutowireCapableBeanFactory,拥有了自动装配的功能
DefaultListableBeanFactory
继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口,所以DefaultListableBeanFactory的功能很强大
ApplicationContext
ApplicationContext是个接口,可以把它理解为一个特殊的BeanFactory
继承了一些子接口<br>
HierarchicalBeanFactory<br>
拥有获取父BeanFactory的功能
ListableBeanFactory
拥有获取beanNames的功能
ResourcePatternResolver
资源加载器,可以一次性获取多个资源(文件资源等等)
EnvironmentCapable
可以获取运行时环境(没有设置运行时环境功能)
ApplicationEventPublisher
拥有广播事件的功能(没有添加事件监听器的功能)
两个重要的实现类<br>
AnnotationConfigApplicationContext<br>
ConfigurableApplicationContext
继承了ApplicationContext接口,增加了,添加事件监听器、添加BeanFactoryPostProcessor、设置Environment,获取ConfigurableListableBeanFactory等功能
AbstractApplicationContext
实现了ConfigurableApplicationContext接口
GenericApplicationContext
继承了AbstractApplicationContext,实现了BeanDefinitionRegistry接口,拥有了所有ApplicationContext的功能,并且可以注册BeanDefinition,注意这个类中有一个属性(DefaultListableBeanFactory beanFactory)
AnnotationConfigRegistry
可以单独注册某个为类为BeanDefinition(可以处理该类上的@Configuration注解,已经可以处理@Bean注解),同时可以扫描
AnnotationConfigApplicationContext
继承了GenericApplicationContext,实现了AnnotationConfigRegistry接口,拥有了以上所有的功能
ClassPathXmlApplicationContext<br>
它也是继承了AbstractApplicationContext,但是相对于AnnotationConfigApplicationContext而言,功能没有AnnotationConfigApplicationContext强大,比如不能注册BeanDefinition
BeanPostProcessor
Bean的后置处理器
Spring中提供的扩展机制,允许程序员可以干涉Bean的生命周期
子接口
InstantiationAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了实例化前
在BeanPostProcessor的基础上增加了实例化后
在BeanPostProcessor的基础上增加了填充属性
DestructionAwareBeanPostProcessor
在BeanPostProcessor的基础上增加了销毁前<br>
MergedBeanDefinitionPostProcessor
在BeanPostProcessor的基础上增加了实例化和实例化后之间
SmartInstantiationAwareBeanPostProcessor
在InstantiationAwareBeanPostProcessor的基础上增加了推断构造方法<br>
在InstantiationAwareBeanPostProcessor的基础上增加了提前暴露引用
BeanFactoryPostProcessor<br>
Bean工厂的后置处理器
Spring中提供的扩展机制,允许程序员可以操作BeanFactory
本接口
可以获取到BeanFactory,程序员可以操作BeanFactory
注意,不能注册BeanDefinition,只能修改BeanDefinition
子接口
BeanDefinitionRegistryPostProcessor<br>
可以注册BeanDefinition