学习网址

BeanDefinition

包含定义Bean的属性和方法的一个类。

在Spring中,定义Bean的方式有以下四种:

  1. 通过XML中的<bean />标签;
  2. @Bean注解;
  3. @Component注解,包括@Controller,@Service。
  4. 直接通过BeanDefinition提供的API;

BeanDefinitionReader

作用是读取Spring配置文件中的内容,将其转化成BeanDefinition。例如将XML文件中的标签转化成BeanDefinition。

主要有两种:

  • XmlBeanDefinitionReader
  • AnnotatedBeanDefinitionReader

XMLBeanDefinitionReader

主要用来解析XML文件中的

AnnotatedBeanDefinitionReader

主要用来将将一个类直接转化成Bean对象:

  1. DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
  2. AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(beanFactory);
  3. // 将User.class解析为BeanDefinition
  4. annotatedBeanDefinitionReader.register(User.class);
  5. System.out.println(beanFactory.getBean("user"));

此外,它会去解析@Conditional,@Scope、@Lazy、@Primary、@DependsOn、@Role、@Description 注解,

注意,不会去解析@Component, 这个是由ClassPathBeanDefinitionScanner来解析的。

BeanFactory

BeanFactory本身是一个接口,实现该接口的类主要用来生成Bean,比较核心的BeanFactory实现类是DefaultListableBeanFactory,层次结构如下。

image.png

  1. AliasRegistry: 设置别名功能;
  2. BeanDefinitionRegistry: 注册,保存,移除,获取BeanDefinition;
  3. BeanFactory: Bean工厂,根据类别,名称或者别名获取Bean。
  4. SingletonBeanRegistry: 可以直接注册,获取单例Bean。
  5. ….
  6. DefaultListableBeanFactory:继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口,所以DefaultListableBeanFactory的功能很强大