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)
目录
相关文章
|
2月前
|
Java Spring
Spring Boot入门(十三) 之 @Configuration实现页面跳转
Spring Boot入门(十三) 之 @Configuration实现页面跳转
|
3月前
|
XML SpringCloudAlibaba Java
Spring注解配置:@Configuration 和 @Component 区别及原理详解
随着`Spring Boot`的盛行,注解配置式开发受到了大家的青睐,从此告别了基于`Spring`开发的繁琐`XML`配置。这里先来提纲挈领的了解一下`Spring`内部对于配置注解的定义,如`@Component、@Configuration、@Bean、@Import`等注解,从功能上来讲,这些注解所负责的功能的确不相同,但是
76 1
|
4月前
|
Java 数据库 Spring
@Configuration加载spring
@Configuration加载spring
|
6月前
|
XML Java 数据格式
Spring之 @Configuration
Spring 提供了丰富的特性和功能,包括依赖注入、面向切面编程、事务管理、数据访问、Web应用程序开发等。其中,@Configuration 是 Spring 中的一个注解,它用于标记一个类为配置类,通过配置类可以定义和组装 Spring Bean,并且支持高度灵活的配置方式。在本文中,我们将深入探讨 @Configuration 注解的底层原理,包括其与 Spring IoC 容器的集成、其对 Bean 的定义和装配的实现,以及其在 Spring 框架中的作用和用法。
|
10月前
|
架构师 Java 容器
|
10月前
|
XML Java 数据格式
【Spring注解必知必会】深度解析@Configuration注解
【Spring注解必知必会】深度解析@Configuration注解
119 0
【Spring注解必知必会】深度解析@Configuration注解
|
11月前
|
XML 消息中间件 SpringCloudAlibaba
【Spring】——1、使用@Configuration和@Bean给容器中注册组件
DI和IOC它俩之间的关系是DI不能单独存在,DI需要在IOC的基础上来完成。 在Spring内部,所有的组件都会放到IOC容器中,组件之间的关系通过IOC容器来自动装配,也就是我们所说的依赖注入。接下来,我们就使用注解的方式来完成容器中组件的注册、管理及依赖、注入等功能。
139 0
【Spring】——1、使用@Configuration和@Bean给容器中注册组件
|
11月前
|
XML Java 数据格式
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)(下)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)(下)
|
11月前
|
Java Spring 容器
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)(上)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part B)(上)
|
11月前
|
XML Java 数据格式
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part A)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part A)
Spring 全家桶之 Spring Boot 2.6.4(二)- Configuration(Part A)
相关产品
云迁移中心
推荐文章
更多