spring configuration注解原理 2022-03-25 05:20 149阅读 0赞 spring既支持xml式配置bean,也可以通过@Configuration注解来配置bean,xml是spring最初支持的方式,随着springboot的出现,通过@Configuration注解来配置bean也越来越被采用,常见的配置如下: @Configuration public class TestConfig \{ protected static Logger logger = LoggerFactory.getLogger(TestConfig.class); public TestConfig()\{ logger.info("TestConfig创建"); \} @Bean("student") Student student()\{ logger.info("student创建"); return new Student(address()); \} @Bean Address address()\{ logger.info("address创建"); return new Address(); \} \} 那么@Configuration注解到底背后的工作原理是什么呢,笔者将从源码角度引入讲述@Configuration注解的工作原理,下面简单概述下Configuration注解是被初始化的流程: AbstractApplicationContext::refresh-->AbstractApplicationContext::invokeBeanFactoryPostProcessors \-->ConfigurationClassPostProcessor::postProcessBeanFactory-->ConfigurationClassPostProcessor::enhanceConfigurationClasses ConfigurationClassPostProcessor::enhanceConfigurationClasses这个方法是Configuration注解工作的核心方法,spring应用启动时所有的被@Configuration注解的类都会被spring cglib库生成cglib动态代理,然后其他地方通过@Autowired注解引入Student类对象就会被生成的configuration配置类生成的动态代理拦截,处理完后再调用原configuration注解类的student方法获取到Student实例。 Configuration注解类初始化的过程我们知道了,那么在Configuration注解内的@Bean注解的方法又是如何被调用的呢,不着急,下面我们将随着源码的探究揭开这层面纱。 @Bean注解方法被调用的入口就在AbstractAutowireCapableBeanFactory::createBeanInstance方法上,下面贴出核心代码: protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object\[\] args) \{ // Make sure bean class is actually resolved at this point. Class<?> beanClass = resolveBeanClass(mbd, beanName); if (beanClass != null && !Modifier.isPublic(beanClass.getModifiers()) && !mbd.isNonPublicAccessAllowed()) \{ throw new BeanCreationException(mbd.getResourceDescription(), beanName, "Bean class isn't public, and non-public access not allowed: " + beanClass.getName()); \} Supplier<?> instanceSupplier = mbd.getInstanceSupplier(); if (instanceSupplier != null) \{ return obtainFromSupplier(instanceSupplier, beanName); \} if (mbd.**getFactoryMethodName**() != null) \{ return instantiateUsingFactoryMethod(beanName, mbd, args); \} 由于@Bean注解方法生成的Bean实例**getFactoryMethodName**不为null,所以就会通过调用对应的bean方法来创建该Bean实例! 想要了解更多的可以在调试spring项目时进入对应源码跟踪调试。
相关 spring @Configuration注解的proxyBeanMethods属性 写在前面的话 或许大家都知道@Configuration注解与@Component注解的区别,@Component注解用来定义一个Bean,而@Configurat 以你之姓@/ 2022年12月19日 11:55/ 0 赞/ 40 阅读
相关 Spring注解@Configuration的使用 从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法们这些方法将会被Annotation 红太狼/ 2022年12月04日 01:05/ 0 赞/ 38 阅读
相关 @Configuration Spring注解详解 第一个作用 使用注释类`@Configuration`表示它的主要目的是作为bean定义的来源 第二个作用 `@Configuration 电玩女神/ 2022年05月26日 01:55/ 0 赞/ 82 阅读
相关 Spring注解 --Configuration //配置类==配置文件 @Configuration //告诉Spring这是一个配置类 @ComponentScans( va 布满荆棘的人生/ 2022年05月20日 01:12/ 0 赞/ 127 阅读
相关 Spring注解之@Configuration @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigAppli 旧城等待,/ 2022年05月20日 01:04/ 0 赞/ 74 阅读
相关 spring configuration注解原理 spring既支持xml式配置bean,也可以通过@Configuration注解来配置bean,xml是spring最初支持的方式,随着springboot的出现,通过@Co 电玩女神/ 2022年03月25日 05:20/ 0 赞/ 150 阅读
相关 spring之@Configuration注解 1. @Configuration标注在类上,相当于把该类作为spring的xml配置文件中的,作用为:配置spring容器 package com.dalingj 落日映苍穹つ/ 2022年01月23日 19:54/ 0 赞/ 165 阅读
相关 spring4.0 之 @Configuration注解 @Configuration注解与spring-\.xml达到的目的是一样的。@Configuration是为了完全的取消xml配置文件而改用注解。下面将对其进行对比说明: 叁歲伎倆/ 2022年01月09日 18:35/ 0 赞/ 135 阅读
相关 spring注解开发:Configuration&Bean 1、使用xml创建bean的方式 -------------------- 1、首先新建一个maven工程,添加如下依赖 <dependency> 小鱼儿/ 2021年12月09日 06:17/ 0 赞/ 258 阅读
相关 @Configuration注解 -【Spring底层原理】 一、注解用法 1. 知识背景 > `lite @Bean mode` :当`@Bean`方法在没有使用`@Configuration`注解的类中声明时称之为` 亦凉/ 2021年09月21日 15:30/ 1 赞/ 356 阅读
还没有评论,来说两句吧...