开发者社区> 李不言> 正文

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)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9267 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24880 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18198 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
17067 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
21572 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
18765 0
+关注
李不言
码农,搬砖的
25
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载