spring注解之
2019-07-04  本文已影响0人  那谁319
  • 在我们使用Spring的时候,基本上很少使用标签配置的方式来声明bean了,都是使用注解的方式来声明bean,在使用注解之前,我们要首先配置一下<context:component-scan/>标签。

<context:component-scan/>标签解析

  • 对应的NamespaceHandler实现类为ContextNamespaceHandler
    • 初始化的解析器为ComponentScanBeanDefinitionParser


      image.png

ComponentScanBeanDefinitionParser解析器

  • ComponentScanBeanDefinitionParser解析器在Spring 初始化解析xml文件时,会执行其parse方法(方法如下图)。
    • 1、确定需要扫描的包路径
    • 2、创建扫描类ClassPathBeanDefinitionScanner
    • 3、扫描包路径下的class文件
    • 4、注册一些注解相关的PostProcessor,并且注册BeanDefinition后的事件通知。


      image.png
image.png
  • 获取annotation-config属性,默认为true
  • 如果annotation-config属性为true,注册一些注解相关的PostProcessor
image.png
  • ConfigurationClassPostProcessor
    • 对@Configuration、@Bean、@Import、@Component、@ComponentScan、@ImportResource等注解的支持
  • AutowiredAnnotationBeanPostProcessor
    • 对@Autowire和@Value注解的支持
  • RequiredAnnotationBeanPostProcessor
    • 对@Required注解的支持
  • CommonAnnotationBeanPostProcessor
  • 对@Resource、@PostConstruct、@PreDestroy注解的支持

*注意:这里注册了一些PostProcessor,用于对各种注解的支持,这里只是注册了处理器,并不会真正的解析注解,我们已经知道BeanFactoryPostProcessor和BeanPostProcessor的作用,AutowiredAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor都实现了BeanPostProcessor,所以会在bean创建的期间被调用,而ConfigurationClassPostProcessor实现了BeanFactoryPostProcessor,所以它会在bean创建之前被调用。

上一篇下一篇

猜你喜欢

热点阅读