5.Spring源码系列-激活注解

介绍

在xml文件中配置<context:annotation-config/>会激活下面的注解:

  • 优先级注解:@Order、@Priority
  • 配置注解器:@Configuration
  • 编织注解器:@Autowired、@Inject、@Value、@Resource
  • @Required、@LookUp、@Lazy
  • 过程处理器:@PreDestroy、@PostConstruct
  • 数据持久:@PersistenceContext、 @PersistenceUnit
  • 事件监听:@EventListener

调用过程

  1. AnnotationConfigBeanDefinitionParser.parse
//激活注解
Set<BeanDefinitionHolder> processorDefinitions =                AnnotationConfigUtils.registerAnnotationConfigProcessors(parserContext.getRegistry(), source);

  1. AnnotationConfigUtils.registerAnnotationConfigProcessors
// 优先级注解
    beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);
    
//
beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());

// @Configuration
RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);

// @Autowored、@Inject、@Value
RootBeanDefinition def = new RootBeanDefinition(AutowiredAnnotationBeanPostProcessor.class);
// @Required
RootBeanDefinition def = new RootBeanDefinition(RequiredAnnotationBeanPostProcessor.class);

//@Resource、@PreDestroy、@PostConstruct
RootBeanDefinition def = new RootBeanDefinition(CommonAnnotationBeanPostProcessor.class);

//@PersistenceContext、 @PersistenceUnit
    def.setBeanClass(ClassUtils.forName(PERSISTENCE_ANNOTATION_PROCESSOR_CLASS_NAME,AnnotationConfigUtils.class.getClassLoader()));

// @EventListener   
RootBeanDefinition def = new RootBeanDefinition(EventListenerMethodProcessor.class);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容