IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

spring源码 之 AnnotatedBeanDefinitionReader

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

作用

用于注解BeanDefinition的读取解析

在哪里初始化:

    public AnnotationConfigApplicationContext() {
        this.reader = new AnnotatedBeanDefinitionReader(this);
        this.scanner = new ClassPathBeanDefinitionScanner(this);
    }

初始化 AnnotationConfigApplicationContext 上下文的时候同时初始化AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner

初始化的时候做了什么事情

    public AnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry) {
        // 省略非主流程代码......
        //注册spring自带的 BeanFactoryPostProcessor 和 BeanPostProcessor

        (this.registry);
    }

AnnotationConfigUtils.registerAnnotationConfigProcessors 做了什么事情

   // 往bean工厂设置了用于排序的类
    beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE);
    //这个不懂  todo
    beanFactory.setAutowireCandidateResolver(new ContextAnnotationAutowireCandidateResolver());

    //接下来很重要
    //往bean工厂注册 ConfigurationClassPostProcessor //(是一种BeanDefinitionRegistryPostProcessor)很重要,后面讲
    RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);
    def.setSource(source);
    beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));    

    //接下来不贴代码,都是往bean工厂注册 BeanPostProcessor
    // 重点 跟@Autowired  @Value  @Inject 有关 
    AutowiredAnnotationBeanPostProcessor 
    // 重点 和@PostConstruct  @Resource @PreDestroy 有关
    CommonAnnotationBeanPostProcessor
    PersistenceAnnotationBeanPostProcessor
    EventListenerMethodProcessor
    DefaultEventListenerFactory

所以初始化就是往bean工厂添加几个spring自带的PostProcessor

需要关注的方法


public void registerBean(Class<?> annotatedClass, String name, Class<? extends Annotation>... qualifiers) { // 传入一个class 解析成beandefinition AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(annotatedClass); // 。。。 省略一堆代码,认为是解析beandefinition的过程,比如解析 //是否有@Lazy 然后设置懒加载属性,解析是否有 Primary //然后设置Primary属性 //接下来就是注册beandefinition到bean工厂中,在另外一个类中DefaultListabl // eBeanFactory#registerBeanDefinition 专门解析,其实比较简单,就是往 // map中put BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName); definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry); BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry); }

总结

AnnotatedBeanDefinitionReader 在spring上下文初始化的时候调用,AnnotatedBeanDefinitionReader自己在初始化的时候会往bean工厂注册spring自带的beanFactoryPostProcessor和beanPostProcessor,这些注册到bean工厂的list中,后面会使用到。AnnotatedBeanDefinitionReader#register 可以往bean工厂注册beanDefinition

文章永久链接:https://tech.souyunku.com/?p=26715


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(66) 打赏



未经允许不得转载:搜云库技术团队 » spring源码 之 AnnotatedBeanDefinitionReader

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367