Skip to content

JonasGao/springlifecycle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring Lifecycle

这是一个用来直观查看 Spring 启动过程的工程。

通过日志,直观的查看 Spring 启动过程中。不同接口的组件,何时被调用。通过附带的描述,了解组件为什么会被调用,由什么引入。结合代码,深入学习 Spring。

懒得跑代码的,这里直接贴日志。但是最好还是结合代码。

10:43:55.796 [main] INFO com.jonas.test.spring.lifecycle.Application - SpringApplication.run                                                                 | 开始

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.7.RELEASE)

2019-05-25 10:43:56.073  INFO 12308 --- [           main] c.j.test.spring.lifecycle.Application    : Starting Application on ......
2019-05-25 10:43:56.074  INFO 12308 --- [           main] c.j.test.spring.lifecycle.Application    : No active profile set, falling back to default profiles: default
2019-05-25 10:43:56.112  INFO 12308 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@15b3e5b: startup date [Sat May 25 10:43:56 CST 2019]; root of context hierarchy
2019-05-25 10:43:56.300  INFO 12308 --- [           main] c.o.t.MyImportBeanDefinitionRegistrar    : ImportBeanDefinitionRegistrar.registerBeanDefinitions                                 | 主 Context 启动时,先处理了 @Import。而且是registry,优先级确实高
2019-05-25 10:43:56.333  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : ApplicationContextAware.setApplicationContext                                         | setApplicationContext是在Spring构造一个bean时调用的。所以对于整体上下文过程,这一句实际不用关心先后。上下文对象信息是 org.springframework.context.annotation.AnnotationConfigApplicationContext 和 id application
2019-05-25 10:43:56.333  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry                 | 之后开始处理registry。这里处理,应该是来自主Context的@SpringBootApplication带的@ComponentScan。 这里registry类型是org.springframework.beans.factory.support.DefaultListableBeanFactory
2019-05-25 10:43:56.333  INFO 12308 --- [           main] .l.MyBeanDefinitionRegistryPostProcessor : BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry                 | 同上,registry的处理顺序,应该是要高于factory和processor等组件。也是主Context扫描而来
2019-05-25 10:43:56.334  INFO 12308 --- [           main] .t.s.l.MyConfigurationAwareConfiguration : (@Configuration).constructor                                                          | 开始处理@Configuration了???这个@Configuration也是由主Context扫描到的。参考下一行日志,这里开始构造,但是还没开始调用@Bean。应该也是在收集类型信息
2019-05-25 10:43:56.336  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第1次
2019-05-25 10:43:56.344  INFO 12308 --- [           main] .t.s.l.MyConfigurationAwareConfiguration : (@Configuration)(@Bean).myConfigurationAware                                          | 开始调用@Bean方法,这里取得了@EnableConfigurationProperties(MyConfigurationAwareProperties.class)的实例
2019-05-25 10:43:56.344  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyConfigurationAware   : ApplicationContextAware.setApplicationContext                                         | 这就没啥好说的了,参照上面的说明
2019-05-25 10:43:56.344  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyConfigurationAware   : BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry                 | 还是优先(尽快)处理registry。级别真的高。不过这里不是扫描到的,而是来自上面的@Configuration,MyConfigurationAwareConfiguration。说明会尽快收集类型信息,然后有些类型信息会尽早处理???还是得看看源码
2019-05-25 10:43:56.344  INFO 12308 --- [           main] com.other.test.MyImportAware             : MyImportAware.constructor                                                             | 开始构造MyImportAware了。
2019-05-25 10:43:56.344  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 这个类是通过主Context类上标记@EnableMyImportAware注解,然后这个注解再@Import这个类。
2019-05-25 10:43:56.345  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 说明开始处理这类自定义@Import注解了,不过顺序不好确定,有可能是因为这个注解的书写顺序是在@Import下面
2019-05-25 10:43:56.345  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 才会比上面的MyImportBeanDefinitionRegistrar晚。
2019-05-25 10:43:56.345  INFO 12308 --- [           main] com.other.test.MyImportAware             : ApplicationContextAware.setApplicationContext                                         | 依然是没啥好说的
2019-05-25 10:43:56.345  INFO 12308 --- [           main] com.other.test.MyImportAware             : ApplicationContextAware.getBean (MyImportProperties) (Before)                         | 
2019-05-25 10:43:56.345  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第2次
2019-05-25 10:43:56.346  INFO 12308 --- [           main] com.other.test.MyImportAware             : ApplicationContextAware.getBean (MyImportProperties) (After)                          | MyImportProperties{name='null'}
2019-05-25 10:43:56.346  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 获取出来的MyImportProperties实例是有的。但是实例的属性,name却是null。实际配置文件是有内容的。
2019-05-25 10:43:56.346  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 这说明过早的获取了properties。1.x的Spring是何时绑定配置文件到@ConfigurationProperties实例的?
2019-05-25 10:43:56.346  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 这也说明,在setApplicationContext里做一些逻辑处理,需要考虑更多。
2019-05-25 10:43:56.346  INFO 12308 --- [           main] com.other.test.MyImportAware             : .                                                                                     | 并且可以看到这里applicationContext.getBean扫描了一次类型信息,并且FactoryBean的类型信息并没有被缓存。因为getObjectType又被调用了。
2019-05-25 10:43:56.347  INFO 12308 --- [           main] com.other.test.MyImportAware             : BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry                 | 还是registry,不用多说
2019-05-25 10:43:56.347  INFO 12308 --- [           main] o.t.OtherConfigurationAwareConfiguration : .constructor                                                                          | 这是主Context类上标记@EnableMyImportAware注解@Import的另一个类
2019-05-25 10:43:56.347  INFO 12308 --- [           main] o.t.OtherConfigurationAwareConfiguration : (@Bean).otherConfigurationAware                                                       | Configuration中的这些@Bean,何时被实例化(也就是调用方法)可能还是看实例的类型信息,比如实现了这些BeanFactory或者Registry一类接口的,会被较早的初始化
2019-05-25 10:43:56.347  INFO 12308 --- [           main] o.t.OtherConfigurationAwareConfiguration : .                                                                                     | OtherConfigurationAware也实现了registry和factory一类的接口。但是,是哪里的代码促使这一行为,是一个很重要的问题。
2019-05-25 10:43:56.347  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : ApplicationContextAware.setApplicationContext                                         | 
2019-05-25 10:43:56.347  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : ApplicationContextAware.getBean (MyImportProperties) (Before)                         | 
2019-05-25 10:43:56.348  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第3次
2019-05-25 10:43:56.348  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : ApplicationContextAware.getBean (MyImportProperties) (After)                          | MyImportProperties{name='null'}
2019-05-25 10:43:56.348  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : .                                                                                     | 这里还是applicationContext.getBean(MyImportProperties.class)。get出来,属性还是null。
2019-05-25 10:43:56.348  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry                 | 
2019-05-25 10:43:56.348  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : .                                                                                     | 这里注意!下面一行日志会提示myConfigurationAwareConfiguration被过早的创建了。而且无论运行多少次,出现的位置相同。可能说明Spring对registry的处理要告一段落了。
2019-05-25 10:43:56.348  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : .                                                                                     | 可以看到,警告之后,就开始处理factory了。
2019-05-25 10:43:56.348  WARN 12308 --- [           main] o.s.c.a.ConfigurationClassPostProcessor  : Cannot enhance @Configuration bean definition 'myConfigurationAwareConfiguration' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
2019-05-25 10:43:56.397  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : BeanFactoryPostProcessor.postProcessBeanFactory                                       | beanFactory 的类型是 class org.springframework.beans.factory.support.DefaultListableBeanFactory
2019-05-25 10:43:56.397  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : BeanFactoryPostProcessor.getBean (AutoAwareProperties) (Before)                       | 
2019-05-25 10:43:56.397  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第4次
2019-05-25 10:43:56.397  INFO 12308 --- [           main] c.j.t.s.lifecycle.AutoAwareProperties    : (@ConfigurationProperties).constructor                                                | 
2019-05-25 10:43:56.399  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : BeanFactoryPostProcessor.getBean (AutoAwareProperties) (After)                        | AutoAwareProperties{name='null'}
2019-05-25 10:43:56.399  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyAutoAware    : .                                                                                     | 这里是在postProcessBeanFactory方法里,get properties实例。可见还是太早。不绑定数据。
2019-05-25 10:43:56.399  INFO 12308 --- [           main] .l.MyBeanDefinitionRegistryPostProcessor : BeanFactoryPostProcessor.postProcessBeanFactory                                       | 注意,这里是来自BeanDefinitionRegistryPostProcessor继承的BeanFactoryPostProcessor
2019-05-25 10:43:56.399  INFO 12308 --- [           main] .l.MyBeanDefinitionRegistryPostProcessor : .                                                                                     | 后边就开始,按初始化的顺序,逐个处理postProcessBeanFactory。
2019-05-25 10:43:56.399  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyConfigurationAware   : BeanFactoryPostProcessor.postProcessBeanFactory                                       | 
2019-05-25 10:43:56.400  INFO 12308 --- [           main] com.other.test.MyImportAware             : BeanFactoryPostProcessor.postProcessBeanFactory                                       | 
2019-05-25 10:43:56.400  INFO 12308 --- [           main] com.other.test.OtherConfigurationAware   : BeanFactoryPostProcessor.postProcessBeanFactory                                       | 
2019-05-25 10:43:56.408  INFO 12308 --- [           main] c.j.t.s.l.MyBeanFactoryPostProcessor     : BeanFactoryPostProcessor.postProcessBeanFactory                                       | 
2019-05-25 10:43:56.425  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第5次
2019-05-25 10:43:56.425  INFO 12308 --- [           main] c.j.t.s.l.BeforeMyBeanPostProcessor      : .constructor                                                                          | 故意测试给BeanPostProcessor接口的实现类,注入一个组件会怎样。果然,下一句就会报警告。
2019-05-25 10:43:56.428  INFO 12308 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'beforeMyBeanPostProcessor' of type [com.jonas.test.spring.lifecycle.BeforeMyBeanPostProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-05-25 10:43:56.432  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.context.event.internalEventListenerProcessor
2019-05-25 10:43:56.432  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.context.event.internalEventListenerProcessor
2019-05-25 10:43:56.434  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.context.event.internalEventListenerFactory
2019-05-25 10:43:56.434  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.context.event.internalEventListenerFactory
2019-05-25 10:43:56.437  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第6次
2019-05-25 10:43:56.438  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第7次
2019-05-25 10:43:56.438  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第8次
2019-05-25 10:43:56.439  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第9次
2019-05-25 10:43:56.439  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyServiceProperties    : MyServiceProperties.constructor                                                       | 
2019-05-25 10:43:56.442  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第10次
2019-05-25 10:43:56.442  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第11次
2019-05-25 10:43:56.442  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第12次
2019-05-25 10:43:56.445  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=com.test.service-com.jonas.test.spring.lifecycle.MyServiceProperties
2019-05-25 10:43:56.445  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=com.test.service-com.jonas.test.spring.lifecycle.MyServiceProperties
2019-05-25 10:43:56.445  INFO 12308 --- [           main] c.jonas.test.spring.lifecycle.MyService  : .constructor                                                                          | MyServiceProperties{name='Service'}
2019-05-25 10:43:56.446  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myService
2019-05-25 10:43:56.447  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myService
2019-05-25 10:43:56.447  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=application
2019-05-25 10:43:56.447  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=application
2019-05-25 10:43:56.449  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myEventListener
2019-05-25 10:43:56.449  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myEventListener
2019-05-25 10:43:56.450  INFO 12308 --- [           main] s.l.GetPropertiesApplicationContextAware : ApplicationContextAware.setApplicationContext                                         | 
2019-05-25 10:43:56.450  INFO 12308 --- [           main] s.l.GetPropertiesApplicationContextAware : ApplicationContextAware.getBean (GetInContextAwareProperties) (Before)                | 
2019-05-25 10:43:56.451  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第13次
2019-05-25 10:43:56.451  INFO 12308 --- [           main] c.j.t.s.l.GetInContextAwareProperties    : .constructor                                                                          | 这里注意,这个类是被上面的Configuration启用的。但是因为没有显式注入,而是在setApplicationContext里getBean。所以初始化比上面的Configuration晚。在被用的时候才初始化。
2019-05-25 10:43:56.453  INFO 12308 --- [           main] c.j.t.s.l.GetInContextAwareProperties    : GetInContextAwareProperties.setName                                                   | 可以看到,这里setName被调用。这一阶段,@ConfigurationProperties的数据可以被绑定。
2019-05-25 10:43:56.453  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=com.test.context.aware-com.jonas.test.spring.lifecycle.GetInContextAwareProperties
2019-05-25 10:43:56.453  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=com.test.context.aware-com.jonas.test.spring.lifecycle.GetInContextAwareProperties
2019-05-25 10:43:56.453  INFO 12308 --- [           main] s.l.GetPropertiesApplicationContextAware : ApplicationContextAware.getBean (GetInContextAwareProperties) (After)                 | GetInContextAwareProperties{name='Context Aware'}
2019-05-25 10:43:56.454  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=getPropertiesApplicationContextAware
2019-05-25 10:43:56.454  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=getPropertiesApplicationContextAware
2019-05-25 10:43:56.455  INFO 12308 --- [           main] c.j.t.s.l.MyApplicationContextAware      : MyApplicationContextAware.setApplicationContext                                       | org.springframework.context.annotation.AnnotationConfigApplicationContext; application
2019-05-25 10:43:56.455  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myApplicationContextAware
2019-05-25 10:43:56.455  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myApplicationContextAware
2019-05-25 10:43:56.456  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanFactoryAware     : BeanFactoryAware.setBeanFactory                                                       | 
2019-05-25 10:43:56.456  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myBeanFactoryAware
2019-05-25 10:43:56.456  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myBeanFactoryAware
2019-05-25 10:43:56.457  INFO 12308 --- [           main] c.j.t.spring.lifecycle.MyBeanNameAware   : BeanNameAware.setBeanName                                                             | myBeanNameAware
2019-05-25 10:43:56.458  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myBeanNameAware
2019-05-25 10:43:56.458  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myBeanNameAware
2019-05-25 10:43:56.458  INFO 12308 --- [           main] c.j.t.spring.lifecycle.MyConfiguration   : .constructor                                                                          | 因为这个Configuration没有实现或者提供,任何特殊类型的实例,所以现在才初始化。
2019-05-25 10:43:56.459  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myConfiguration
2019-05-25 10:43:56.459  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myConfiguration
2019-05-25 10:43:56.461  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myFactoryBean
2019-05-25 10:43:56.461  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myFactoryBean
2019-05-25 10:43:56.461  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第14次
2019-05-25 10:43:56.462  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyProperties   : MyProperties.constructor                                                              | 
2019-05-25 10:43:56.463  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyProperties   : MyProperties.setName                                                                  | 
2019-05-25 10:43:56.463  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=com.test.my-com.jonas.test.spring.lifecycle.MyProperties
2019-05-25 10:43:56.463  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=com.test.my-com.jonas.test.spring.lifecycle.MyProperties
2019-05-25 10:43:56.471  INFO 12308 --- [           main] c.j.t.spring.lifecycle.MyConfiguration   : (@Bean).myConfigurationOutputBean                                                     | MyProperties{name='Prop'}
2019-05-25 10:43:56.471  INFO 12308 --- [           main] c.j.t.s.l.MyConfigurationOutputBean      : .constructor                                                                          | 
2019-05-25 10:43:56.473  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=myConfigurationOutputBean
2019-05-25 10:43:56.473  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=myConfigurationOutputBean
2019-05-25 10:43:56.474  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.AutoConfigurationPackages
2019-05-25 10:43:56.474  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.AutoConfigurationPackages
2019-05-25 10:43:56.478  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
2019-05-25 10:43:56.478  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
2019-05-25 10:43:56.485  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
2019-05-25 10:43:56.486  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration
2019-05-25 10:43:56.486  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第15次
2019-05-25 10:43:56.490  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=objectNamingStrategy
2019-05-25 10:43:56.490  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=objectNamingStrategy
2019-05-25 10:43:56.497  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=mbeanServer
2019-05-25 10:43:56.497  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=mbeanServer
2019-05-25 10:43:56.503  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=mbeanExporter
2019-05-25 10:43:56.503  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=mbeanExporter
2019-05-25 10:43:56.504  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第16次
2019-05-25 10:43:56.505  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第17次
2019-05-25 10:43:56.507  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
2019-05-25 10:43:56.508  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration
2019-05-25 10:43:56.513  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=springApplicationAdminRegistrar
2019-05-25 10:43:56.513  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=springApplicationAdminRegistrar
2019-05-25 10:43:56.516  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
2019-05-25 10:43:56.516  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
2019-05-25 10:43:56.516  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第18次
2019-05-25 10:43:56.519  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
2019-05-25 10:43:56.519  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties
2019-05-25 10:43:56.522  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
2019-05-25 10:43:56.522  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration
2019-05-25 10:43:56.524  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessBeforeInitialization                                     | beanName=org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration
2019-05-25 10:43:56.524  INFO 12308 --- [           main] c.j.t.s.lifecycle.MyBeanPostProcessor    : BeanPostProcessor.postProcessAfterInitialization                                      | beanName=org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration
2019-05-25 10:43:56.524  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第19次
2019-05-25 10:43:56.525  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第20次
2019-05-25 10:43:56.532  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第21次
2019-05-25 10:43:56.542  INFO 12308 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2019-05-25 10:43:56.543  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第22次
2019-05-25 10:43:56.544  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第23次
2019-05-25 10:43:56.545  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.isSingleton                                                               | 
2019-05-25 10:43:56.546  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第24次
2019-05-25 10:43:56.547  INFO 12308 --- [           main] c.j.t.s.lifecycle.event.MyEventListener  : (@EventListener).handleContextRefreshedEvent                                          | 
2019-05-25 10:43:56.556  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第25次
2019-05-25 10:43:56.557  INFO 12308 --- [           main] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第26次
2019-05-25 10:43:56.557  INFO 12308 --- [           main] c.j.test.spring.lifecycle.Application    : Application (CommandLineRunner).run                                                   | 
<====
null
org.springframework.beans.factory.support.DefaultListableBeanFactory@1f0f1111: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,application,org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory,beforeMyBeanPostProcessor,myEventListener,getPropertiesApplicationContextAware,myApplicationContextAware,myAutoAware,myBeanDefinitionRegistryPostProcessor,myBeanFactoryAware,myBeanFactoryPostProcessor,myBeanNameAware,myBeanPostProcessor,myConfiguration,myConfigurationAwareConfiguration,myFactoryBean,myService,com.test.context.aware-com.jonas.test.spring.lifecycle.GetInContextAwareProperties,org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor,org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.store,com.test.auto-com.jonas.test.spring.lifecycle.AutoAwareProperties,myConfigurationOutputBean,com.test.my-com.jonas.test.spring.lifecycle.MyProperties,myConfigurationAware,com.test.aware.config-com.jonas.test.spring.lifecycle.MyConfigurationAwareProperties,com.test.service-com.jonas.test.spring.lifecycle.MyServiceProperties,com.other.test.MyImportAware,com.other.test.OtherConfigurationAwareConfiguration,otherConfigurationAware,org.springframework.boot.autoconfigure.AutoConfigurationPackages,com.test.import-com.jonas.test.spring.lifecycle.MyImportProperties,org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,org.springframework.boot.autoconfigure.condition.BeanTypeRegistry,propertySourcesPlaceholderConfigurer,org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,mbeanExporter,objectNamingStrategy,mbeanServer,org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,springApplicationAdminRegistrar,org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,spring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties,org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration]; root of factory hierarchy
com.jonas.test.spring.lifecycle.MyService@1be2019a
<====
2019-05-25 10:43:56.558  INFO 12308 --- [           main] c.j.test.spring.lifecycle.Application    : Started Application in 0.671 seconds (JVM running for 2.2)
2019-05-25 10:43:56.558  INFO 12308 --- [           main] c.j.test.spring.lifecycle.Application    : SpringApplication.run                                                                 | 结束
2019-05-25 10:43:56.559  INFO 12308 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@15b3e5b: startup date [Sat May 25 10:43:56 CST 2019]; root of context hierarchy
2019-05-25 10:43:56.560  INFO 12308 --- [       Thread-2] c.j.t.s.lifecycle.event.MyEventListener  : (@EventListener).handleContextClosedEvent                                             | 
2019-05-25 10:43:56.560  INFO 12308 --- [       Thread-2] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.isSingleton                                                               | 
2019-05-25 10:43:56.560  INFO 12308 --- [       Thread-2] c.j.test.spring.lifecycle.MyFactoryBean  : FactoryBean.getObjectType                                                             | 也是由主Context扫描到的。应该是先收集类型信息。不过会调用多次。这是第27次
2019-05-25 10:43:56.561  INFO 12308 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown

Process finished with exit code 0

The life of a bean

一个 Bean 的一生

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.5.7.RELEASE)

2019-05-25 10:59:36.229  INFO 8964 --- [           main] c.j.t.s.o.TheLifeOfABeanApplication      : Starting TheLifeOfABeanApplication on ......
2019-05-25 10:59:36.237  INFO 8964 --- [           main] c.j.t.s.o.TheLifeOfABeanApplication      : No active profile set, falling back to default profiles: default
2019-05-25 10:59:36.290  INFO 8964 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6d3af739: startup date [Sat May 25 10:59:36 CST 2019]; root of context hierarchy
2019-05-25 10:59:36.694  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : .constructor                                                                          | 
2019-05-25 10:59:36.697  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : ApplicationContextAware.setBeanName                                                   | 
2019-05-25 10:59:36.697  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : BeanNameAware.setBeanFactory                                                          | 
2019-05-25 10:59:36.697  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : BeanFactoryAware.setApplicationContext                                                | 
2019-05-25 10:59:36.698  INFO 8964 --- [           main] c.j.t.spring.onebean.ABeanPostProcessor  : BeanPostProcessor.postProcessBeforeInitialization                                     | 
2019-05-25 10:59:36.699  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : .@PostConstruct                                                                       | 
2019-05-25 10:59:36.700  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : InitializingBean.afterPropertiesSet                                                   | 
2019-05-25 10:59:36.701  INFO 8964 --- [           main] com.jonas.test.spring.onebean.TheBean    : (@Bean initMethod=).init                                                              | 
2019-05-25 10:59:36.701  INFO 8964 --- [           main] c.j.t.spring.onebean.ABeanPostProcessor  : BeanPostProcessor.postProcessAfterInitialization                                      | 
2019-05-25 10:59:36.774  INFO 8964 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2019-05-25 10:59:36.781  INFO 8964 --- [           main] c.j.t.s.o.TheLifeOfABeanApplication      : Started TheLifeOfABeanApplication in 0.765 seconds (JVM running for 2.723)
2019-05-25 10:59:36.782  INFO 8964 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6d3af739: startup date [Sat May 25 10:59:36 CST 2019]; root of context hierarchy
2019-05-25 10:59:36.783  INFO 8964 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2019-05-25 10:59:36.783  INFO 8964 --- [       Thread-2] com.jonas.test.spring.onebean.TheBean    : .@PreDestroy                                                                          | 
2019-05-25 10:59:36.783  INFO 8964 --- [       Thread-2] com.jonas.test.spring.onebean.TheBean    : (@Bean destroyMethod=).destroy                                                        | 

Process finished with exit code 0

这个工程还在进行中,还未完工。敬请期待...

About

spring lifecycle

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages