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