Spring对configuration class的加载

前言

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

单元测试和配置

1public class Config { 2 3} 4 5public class ContextLoadTest { 6 private ApplicationContext ctx = null; 7 8 @Before 9 public void setUp() { 10 ctx = new AnnotationConfigApplicationContext(Config.class); 11 } 12 13 14 @Test 15 public void testContextLoads() { 16 17 } 18 19}

BeanDefinition的加载堆栈记载

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

值得留意的是:

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

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

BeanDefinition的注册:

org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(String, BeanDefinition)
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

spring源码解析

前言上篇我们介绍了spring容器加载的方式,并重点介绍了基于xml配置解析和注解扫描两种容器加载的方式,封装和注册beandefinition的过程。今天我们分享BeanDefinition注册后的另一个重要过程bean的实例化过程的源码。容器加载流程!spring源码解析spring容器加载源码(bean实