BeanDefinition
包含定义Bean的属性和方法的一个类。
在Spring中,定义Bean的方式有以下四种:
- 通过XML中的
<bean />
标签; - @Bean注解;
- @Component注解,包括@Controller,@Service。
- 直接通过BeanDefinition提供的API;
BeanDefinitionReader
作用是读取Spring配置文件中的内容,将其转化成BeanDefinition。例如将XML文件中的
主要有两种:
- XmlBeanDefinitionReader
- AnnotatedBeanDefinitionReader
XMLBeanDefinitionReader
主要用来解析XML文件中的
AnnotatedBeanDefinitionReader
主要用来将将一个类直接转化成Bean对象:
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(beanFactory);
// 将User.class解析为BeanDefinition
annotatedBeanDefinitionReader.register(User.class);
System.out.println(beanFactory.getBean("user"));
此外,它会去解析@Conditional,@Scope、@Lazy、@Primary、@DependsOn、@Role、@Description 注解,
注意,不会去解析@Component, 这个是由ClassPathBeanDefinitionScanner来解析的。
BeanFactory
BeanFactory本身是一个接口,实现该接口的类主要用来生成Bean,比较核心的BeanFactory实现类是DefaultListableBeanFactory
,层次结构如下。
- AliasRegistry: 设置别名功能;
- BeanDefinitionRegistry: 注册,保存,移除,获取BeanDefinition;
- BeanFactory: Bean工厂,根据类别,名称或者别名获取Bean。
- SingletonBeanRegistry: 可以直接注册,获取单例Bean。
- ….
- …
- DefaultListableBeanFactory:继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口,所以DefaultListableBeanFactory的功能很强大