Spring对configuration class的加载

简介: 前言本文不讲解源码,仅记录加载过程中的一部分。看本文需要先知道spring对BeanDefinition的处理,对bean的实例化。单元测试和配置public class Config {}public class ContextLoad...

前言

本文不讲解源码,仅记录加载过程中的一部分。看本文需要先知道spring对BeanDefinition的处理,对bean的实例化。

单元测试和配置

public class Config {

}
public class ContextLoadTest {
    private ApplicationContext ctx = null;
    
    @Before
    public void setUp() {
        ctx = new AnnotationConfigApplicationContext(Config.class);
    }
    
    
    @Test
    public void testContextLoads() {
        
    }
    
}

BeanDefinition的加载堆栈记载

org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:58478   
    Thread [main] (Suspended (breakpoint at line 846 in DefaultListableBeanFactory))    
        owns: ConcurrentHashMap<K,V>  (id=111)  
        owns: Object  (id=96)   
        DefaultListableBeanFactory.registerBeanDefinition(String, BeanDefinition) line: 846 
        ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(BeanMethod) line: 266   
        ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClass, ConfigurationClassBeanDefinitionReader$TrackedConditionEvaluator) line: 140 
        ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(Set<ConfigurationClass>) line: 116   
        ConfigurationClassPostProcessor.processConfigBeanDefinitions(BeanDefinitionRegistry) line: 320  
        ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(BeanDefinitionRegistry) line: 228 
        PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(Collection<BeanDefinitionRegistryPostProcessor>, BeanDefinitionRegistry) line: 272 
        PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory, List<BeanFactoryPostProcessor>) line: 92 
        AnnotationConfigApplicationContext(AbstractApplicationContext).invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory) line: 687   
        AnnotationConfigApplicationContext(AbstractApplicationContext).refresh() line: 525  
        AnnotationConfigApplicationContext.<init>(Class<?>...) line: 84 
        BeanOverrideTest.setUp() line: 16   
        NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
        NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62  
        DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43  
        Method.invoke(Object, Object...) line: 498  
        FrameworkMethod$1.runReflectiveCall() line: 50  
        FrameworkMethod$1(ReflectiveCallable).run() line: 12    
        FrameworkMethod.invokeExplosively(Object, Object...) line: 47   
        RunBefores.evaluate() line: 24  
        BlockJUnit4ClassRunner(ParentRunner<T>).runLeaf(Statement, Description, RunNotifier) line: 325  
        BlockJUnit4ClassRunner.runChild(FrameworkMethod, RunNotifier) line: 78  
        BlockJUnit4ClassRunner.runChild(Object, RunNotifier) line: 57   
        ParentRunner$3.run() line: 290  
        ParentRunner$1.schedule(Runnable) line: 71  
        BlockJUnit4ClassRunner(ParentRunner<T>).runChildren(RunNotifier) line: 288  
        ParentRunner<T>.access$000(ParentRunner, RunNotifier) line: 58  
        ParentRunner$2.evaluate() line: 268 
        BlockJUnit4ClassRunner(ParentRunner<T>).run(RunNotifier) line: 363  
        JUnit4TestReference.run(TestExecution) line: 86 
        TestExecution.run(ITestReference[]) line: 38    
        RemoteTestRunner.runTests(String[], String, TestExecution) line: 538    
        RemoteTestRunner.runTests(TestExecution) line: 760  
        RemoteTestRunner.run() line: 460    
        RemoteTestRunner.main(String[]) line: 206   
    Thread [ReaderThread] (Running) 

值得留意的是:

ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(Set<ConfigurationClass>) line: 116   

这里就是把BeanDefinition从configuration class加载进来的过程,类似解析xml。

BeanDefinition的注册:

org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(String, BeanDefinition)
目录
相关文章
|
缓存 Java 容器
【Spring IOC容器加载过程】
【Spring IOC容器加载过程】
132 1
|
8月前
|
XML Java Maven
第1次Spring源码学习之@Bean、@Configuration、xml、分析
第1次Spring源码学习之@Bean、@Configuration、xml、分析
75 0
|
8月前
|
XML Java 数据库
探索 Spring Boot 中的 @Configuration 注解:核心概念与应用
【4月更文挑战第20天】在 Spring Boot 项目中,@Configuration 注解扮演了一个关键角色,它标识一个类作为配置源,这些配置用于定义和管理 Spring 应用程序中的 Bean
1147 7
|
2月前
|
监控 IDE Java
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
如何在无需重新启动服务器的情况下在 Spring Boot 上重新加载我的更改?
82 8
|
4月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
350 24
|
4月前
|
XML 存储 Java
spring源码刨析-spring-beans(内部核心组件,beanDefinition加载过程)
spring源码刨析-spring-beans(内部核心组件,beanDefinition加载过程)
|
4月前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
129 0
|
5月前
|
Java Spring
Spring boot +Thymeleaf 本地图片加载失败(图片路径)的问题及解决方法
这篇文章详细讲解了在Spring Boot应用程序中本地图片无法加载的问题原因,并提供了两个示例来说明如何通过使用正确的相对路径或Thymeleaf语法来解决图片路径问题。
|
5月前
|
前端开发 JavaScript Java
Spring boot 本地图片不能加载(图片路径)的问题及解决方法
这篇文章讨论了Spring Boot应用程序中本地图片无法加载的问题,通常由图片路径不正确引起,并提供了使用正确的相对路径和Thymeleaf语法来解决这一问题的两种方法。
|
7月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
60 3