美文网首页
Spring中核心概念详解

Spring中核心概念详解

作者: 一个帅哥的人生 | 来源:发表于2021-01-25 20:14 被阅读0次

    BeanDefinition

    Bean的定义,在Spring中,我们可以如何去定义一个Bean?

        1、<bean/>

        2、@Bean

        3、@Component(@Service,@Controller)

    我们通过<bean/>,@Bean,@Component等方式所定义的Bean,最终都会被解析为BeanDefinition对象。BeanDefinition可以理解为底层源码级别的一个概念,也可以理解为Spring提供的一种API使用的方式。


    BeanDefinitionReader

    BeanDefinitionReader分为几类:

    AnnotatedBeanDefinitionReader

    可以直接把某个类转换为BeanDefinition,并且会解析该类上的注解

    注意:它能解析的注解是:@Conditional,@Scope、@Lazy、@Primary、@DependsOn、@Role、@Description

    XmlBeanDefinitionReader

    可以解析<bean/>标签


    ClassPathBeanDefinitionScanner

    这个并不是BeanDefinitionReader,但是它的作用和BeanDefinitionReader类似,它可以进行扫描,扫描某个包路径,对扫描到的类进行解析,比如,扫描到的类上如果存在@Component注解,那么就会把这个类解析为一个BeanDefinition


    BeanFactory

    Spring中比较核心的是BeanFactory的实现类是DefaultListableBeanFactory

    它实现了很多接口,表示,它拥有很多功能:

    1、AliasRegistry:支持别名功能,一个名字可以对应多个别名

    2、BeanDefinitionRegistry:可以注册、保存、移除、获取某个BeanDefinition

    3、BeanFactory:Bean工厂,可以根据某个bean的名字、或类型、或别名获取某个Bean对象

    4、SingletonBeanRegistry:可以直接注册、获取某个单例Bean

    5、SimpleAliasRegistry:它是一个类,实现了AliasRegistry接口中所定义的功能,支持别名功能

    6、ListableBeanFactory:在BeanFactory的基础上,增加了其他功能,可以获取所有BeanDefinition的beanNames,可以根据某个类型获取对应的beanNames,可以根据某个类型获取{类型:对应的Bean}的映射关系

    7、HierarchicalBeanFactory:在BeanFactory的基础上,添加了获取父BeanFactory的功能

    8、DefaultSingletonBeanRegistry:它是一个类,实现了SingletonBeanRegistry接口,拥有了直接注册、获取某个单例Bean的功能

    9、ConfigurableBeanFactory:在HierarchicalBeanFactory和SingletonBeanRegistry的基础上,添加了设置父BeanFactory、类加载器(表示可以指定某个类加载器进行类的加载)、设置Spring EL表达式解析器(表示该BeanFactory可以解析EL表达式)、设置类型转化服务(表示该BeanFactory可以进行类型转化)、可以添加BeanPostProcessor(表示该BeanFactory支持Bean的后置处理器),可以合并BeanDefinition,可以销毁某个Bean等等功能

    10、FactoryBeanRegistrySupport:支持了FactoryBean的功能

    11、AutowireCapableBeanFactory:是直接继承了BeanFactory,在BeanFactory的基础上,支持在创建Bean的过程中能对Bean进行自动装配

    12、AbstractBeanFactory:实现了ConfigurableBeanFactory接口,继承了FactoryBeanRegistrySupport,这个BeanFactory的功能已经很全面了,但是不能自动装配和获取beanNames

    13、ConfigurableListableBeanFactory:继承了ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory

    14、AbstractAutowireCapableBeanFactory:继承了AbstractBeanFactory,实现了AutowireCapableBeanFactory,拥有了自动装配的功能

    15、DefaultListableBeanFactory:继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口,所以DefaultListableBeanFactory的功能很强大


    ApplicationContext

    首先ApplicationContext是个接口,可以把它理解为一个特殊的BeanFactory

    1、HierarchicalBeanFactory:拥有获取父BeanFactory的功能

    2、ListableBeanFactory:拥有获取beanNames的功能

    3、ResourcePatternResolver:资源加载器,可以一次性获取多个资源(文件资源等等)

    4、EnvironmentCapable:可以获取运行时环境(没有设置运行时环境功能)

    5、ApplicationEventPublisher:拥有广播事件的功能(没有添加事件监听器的功能)

    6、MessageSource:拥有国际化功能

    有两个比较重要的实现类:

    1、AnnotationConfigApplicationContext

    2、ClassPathXmlApplicationContext

    AnnotationConfigApplicationContext

    1、ConfigurableApplicationContext:继承了ApplicationContext接口,增加了,添加事件监听器、添加BeanFactoryPostProcessor、设置Environment,获取ConfigurableListableBeanFactory等功能

    2、AbstractApplicationContext:实现了ConfigurableApplicationContext接口

    3、GenericApplicationContext:继承了AbstractApplicationContext,实现了BeanDefinitionRegistry接口,拥有了所有ApplicationContext的功能,并且可以注册BeanDefinition,注意这个类中有一个属性(DefaultListableBeanFactory beanFactory)

    4、AnnotationConfigRegistry:可以单独注册某个为类为BeanDefinition(可以处理该类上的@Configuration注解,已经可以处理@Bean注解),同时可以扫描

    5、AnnotationConfigApplicationContext:继承了GenericApplicationContext,实现了AnnotationConfigRegistry接口,拥有了以上所有的功能

    ClassPathXmlApplicationContext


    BeanPostProcessor

    Bean的后置处理器,可以在创建每个Bean的过程中进行干涉,是属于BeanFactory中一个属性。


    BeanFactoryPostProcessor

    Bean工厂的后置处理器,是属于ApplicationContext中的一个属性,是ApplicationContext在实例化一个BeanFactory后,可以利用BeanFactoryPostProcessor继续处理BeanFactory。


    FactoryBean

    允许程序员自定义一个对象通过FactoryBean间接的放到Spring容器中成为一个Bean。

    相关文章

      网友评论

          本文标题:Spring中核心概念详解

          本文链接:https://www.haomeiwen.com/subject/jiluaktx.html