1、三种Bean初始化方式 1....@Bean注解initMethod属性指定初始化方法 @Bean(initMethod = "init3") public Bean1 bean1() { return new Bean1();...@PostConstruct注解属性指定初始化方法 @Slf4j public class Bean1 implements InitializingBean { @PostConstruct...初始化3"); } } 输出结果: [DEBUG] 21:14:58.781 [main] com.xc.a07.Bean1 - 初始化1 [DEBUG]....Bean1 - 初始化3 执行顺序: @PostConstruct > InitializingBean接口 > @Bean属性initMethod 2、
spring 体系结构图 Bean初始化 个人认为,Spring最原始或者最基础的功能是“容器”,帮你管理着一堆bean的生命周期,任你取用,要想更好的使用Spring,还是得了解Bean的整个生命周期...,首先了解Bean的初始化过程。...本文采用XML配置文件的方式管理bean,分析XmlBeanFactory对于XML文件的解析过程。废话不多说,先上图: ?...BeanDefinition:这个接口及其实现类非常重要,他描述了XML中一个bean节点及其子节点的所有属性,将xml中的描述转变成内部的field信息,举例:scope,lazyinit,ConstructorArgumentValues...定义的人,它做的可都是脏活累活,import/alias/bean等element以及element的子节点以及属性都是它解析并且填充到BeanDefinition中然后使用ReaderContext中的
前言 前面两篇文章主要介绍的是xml到BeanDefinition的过程,我们知道在使用Spring的过程中通常直接使用getBean(beanName)的方式,getBean返回的是实例化并且已经完成初始化后的对象...抽丝剥茧出主干也就是: 根据BeanDefinition的信息找到对象构造器,实例化对象 根据BeanDefinition的信息找到属性值,填充之 如果有初始化方法,调用初始化方法 当然上述主干主要讲的是非单例对象...Spring属性填充过程 Spring在Bean创建过程中提供的扩展点及事件监听 Spring的initiation过程及一种并行初始化的实现。...在getSingleton(beanName, singletonFactory)方法中会调用getObject(),实际上也就是调用了createBean,bean的创建实际上是从这个地方开始的。..., mbd); } 抽去一些不太重要的代码只有,整个逻辑非常清楚,首先createBeanInstance创建对象,然后填充对象populateBean,最后调用初始化方法initializeBean,
bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。...这最后一步就是初始化,也就是 initializeBean(),所以这篇文章我们分析 doCreateBean() 中最后一步:初始化 bean。...bean 的方法其实就是三个步骤的处理,而这三个步骤主要还是根据用户设定的来进行初始化,这三个过程为: 激活 Aware 方法 后置处理器的应用 激活自定义的 init 方法 激活 Aware 方法...Bean 的功能。...BeanPostProcessor 的作用是:如果我们想要在 Spring 容器完成 Bean 的实例化,配置和其他的初始化后添加一些自己的逻辑处理,那么请使用该接口,这个接口给与了用户充足的权限去更改或者扩展
的区别 上述初始化过程中可以看到java对象和bean其实有很大的区别。...(2)判断是否bean处于正在初始化中,这个条件主要是为了循环依赖使用,循环依赖情况下,可能存在bean正在创建中的情况。这种情况今天的初始化过程先不涉及。...此时的testSerivce还不是bean,也可以使用指定testService的初始化方法来观察,有没有执行bean的初始化方法。 ?...在调用createBean方法之前,已经放在了创建队列中。...singletonObject : null); } } 五、普通bean的初始化过程-总结 以上就是普通spring bean的初始化过程,跟着debug阅读bean的初始化过程其实并不复杂
,今天我们来看了解一下Spring一个Bean的加载。 init-method方法 init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置。...,然后对所有的bean进行一个初始化之前和之后的代理。...postProcessBeforeInitialization方法在bean初始化之前执行, postProcessAfterInitialization方法在bean初始化之后执行。...BeanPostProcessor处理器的使用 先看一下BeanPostProcessor接口的源码,它定义了两个方法,一个在bean初始化之前,一个在bean初始化之后 public interface...== ISomeService.class) { System.out.println("bean 对象初始化之前······"); } return
从这个简单的代码深入,使用AnnotationConfigApplicationContext看一下spring bean的初始化过程 public static void main(String[]...bean创建 第一个方法进入AnnotationConfigApplicationContext的构造函数 public AnnotationConfigApplicationContext() {...在this()的构造函数里面,定义了两个变量,是用来加载BeanDefinition的,具体使用哪个,就看使用的是传入的参数是什么类型就使用哪个构造函数。...比如我们的例子传入的是class,那就使用的reader public void register(Class<?...base package must be specified"); this.scanner.scan(basePackages); } 看下这儿使用的reader.register() public
对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式 @PostConstruct 标注方法 自定义初始化方法 实现 initializingBean 接口的afterPropertiesSet...()方法 对JDK比较敏感的朋友应该知道@PostConstruct这种标注方法。......"); } } 简单进行容器创建->装置配置->启动应用上下文..依赖查找Bean @Configurable public class BeanInitializationDemo {...二、自定义初始化方法 自定义初始化方法大致可分为三种实现 XML 配置:bean init-method=”init” ... /> Java 注解:@Bean(initMethod=”init”)...归纳 上面三种方式案例分别介绍了PostConstruct、initializingBean以及自定义Bean初始化的方法;从执行结果可以看出,他们的执行顺序是有一定的要求的。
---- 先了解下如何显示的控制bean的加载顺序----显示的注入依赖的bean ---- 使用注解@Autowire、@Resource、@Inject 显示声明依赖的bean。...当前bean创建后,会初始化所依赖的bean,并注入。...初始化后,自定义初始化逻辑。...非显示依赖的bean,使用@DependsOn注解控制实例加载顺序 ---- 在spring容器加载类并实例化的过程中,除非指定显示依赖,则实例初始化的顺序是不可预知的,而且spring在以后的版本中,...注解@DependsOn,可以使隐式依赖的bean优先于当前bean初始化加载。 隐式依赖的情况比如DDD驱动模式中,spring可以使用事件监听模拟实现的业务场景中。
我们通过spring容器帮我们实例化并且维护bean的时候,有时候我们需要在bean在实例化完成的时候,帮我们做一些事情,这个时候我们就会使用到bean的初始化方法。...(beanName, bean, mbd); } } } 注释1通过实现InitializingBean方式来实现初始化的非常的简单,不做过多的介绍,注释2通过@Bean的方式稍微介绍一下...当我们通过@Bean方式还是之前通过xml配置bean时都能够指定initMethod属性,此时就会将这个bean先封装成BeanDefinition,同时配置的属性也会设置到BeanDefinition...bean创建的过程都是先封装成beanDefinition,如果这一块不了解的可以先阅读相关文章 上面我们已经知道InitializingBean和@Bean(initMethod=“xx”)来实现初始化方法的原理...(我们自己也可以实现),通过它达到在spring创建过程中拦截的作用,在某个动作之前/之后做一些感兴趣的事情,达到“增强”的目的 这里其实就是用到了一个InitDestroyAnnotationBeanPostProcessor
在上篇文章中,我们详细分析了doCreateBean()中的第5步:属性填充,本文接着分析doCreateBean()的第6步——初始化 bean 实例对象 首先回顾下CreateBean的主流程...单例模式的循环依赖处理 属性填充 初始化 bean 实例对象 依赖检查 注册bean的销毁方法 一、初始化 Spring在对Bean进行属性填充之后,会对Bean进行初始化,代码如下: //AbstractAutowireCapableBeanFactory.java...bean 的方法其实就是三个步骤的处理,而这三个步骤主要还是根据用户设定的来进行初始化,这三个过程为: 激活 Aware 方法。...1.2、后置处理器 BeanPostProcessor 在前面介绍 bean 加载的过程曾多次遇到, 它的作用是: 如果我们想要在 Spring 容器完成 Bean 的实例化,配置和其他的初始化后添加一些自己的逻辑处理...1.3、自定义init方法 在xml中有一个bean >标签的配置, init-method 方法,是可以让我们在Bean初始化的时候,先执行我们自定义的一些逻辑。
事件总线在进行处理的时候是需要用到初始化以及最终的保存的,因为事件总线在传输的过程当中,经过编纂以及改变,都已经达到了使用者所想要的一个方式,在这个时候是可以了解事件总线怎么初始化的。...之前的数据应该如何保存? 事件总线在进行发布以及组件之间的通讯时,是需要通过设计反射多线程组件等方式进行循环运转。这样的单例模式以及双重校验的事件总线可以确保它在不同的线程当中可以有效的传输。...了解了事件总线怎么初始化之后,之前的数据如果想要保存的话,就可以通过android事件发布,将提前预留好的数据发布到云端。...这样,接收者可以在初始化之后,也将之前发布过的数据全部保存下来,下载到另外一个硬盘驱动上,就不会造成数据的丢失以及浪费。这也是软件发送者以及事件总线接收者在进行处理数据时,应当注意到的一点。...以上就是事件总线怎么初始化?之前的数据应该如何保存?的相关内容,通过这样的了解事件总线组织贡献,可以通过接口的函数,通过计算将数据终端处理进行初始化。
在Bean对象的完整的生命周期前我们还需要给大家介绍下Bean对象自身初始化及销毁的相关方法。...Bean初始化及销毁方法 在Spring中给我们提供了两种操作的方法, 通过bean标签中的init-method和destroy-method属性来设置初始化及销毁对象时的回调方法 通过@PostConstruct...注解和@PreDestroy注解来标示初始化的方法及销毁回调的方法。...*/ public void start(){ System.out.println("--自定义的初始化的方法--"); } /** * 自定义的初始化的方法 */ @PostConstruct...Bean的完整生命周期
前面提到过Bean的初始化方式,在Bean 的配置元信息时候我们知道Bean的元信息配置中有lazy-init 延迟初始化属性配置,延迟初始化Spring Bean 还有Java 注解API的方式实现...); 这个方法的作用是完成Bean的初始化动作,看注释 Instantiate all remaining (non-lazy-init) singletons....它的意思就是:它会去初始化或者是实例化我们所有的非延迟初始化的一个单体类或者单体Bean 进入方法里面又可以发现 // Instantiate all remaining (non-lazy-init...,普通的Bean在这里初始化 ,部分Bean是需要我们内部容器自己做初始化 。...另一个动作就是延迟加载按需加载Bean 总结 其实延迟加载和非延迟加载在定义的时候,就是Bean注册的时候是没有区别按照你需要的时候进行注册;但是在依赖查找和依赖注入的时候它的区别就体现出来了,一个是在应用上下文启动之前
本例主要介绍基于xml文件配置的4中初始化方法 1、使用property配置Bean 2、使用P标签简化配置Bean 3、使用构造函数初始化Bean 4、使用基础来初始化Bean applicationContext.xml...使用property初始化Bean属性 --> bean id="user1" class="cn.com.infcn.bean.User"> 的 bean --> bean="audiCar" /> bean...-- 4. bean 的配置能够继承吗 ?.../ 3、使用使用构造初始化Bean printUser(ac, "user3"); // 4、使用基础来初始化Bean printUser(ac, "user4
spring bean 加载耗时分析 分析bean加载耗时 首先需要分析加载耗时高的bean。...可以看下这些bean的特点,大部分都是在afterPropertiesSet,postconstruct,init方法中有初始化逻辑 eg....AgentConfig中有个构建bean,并调用init方法初始化。...默认是按照module,package的ascii顺序来加载。但这个类的初始化顺序不是固定的,在不同机器上表现形式不一样。...postConstructC afterC 这时候bean的加载顺序为 调用对象的构造函数 为对象注入依赖,执行依赖对象的初始化过程 执行PostConstruct,afterPropertiesSet
0x01:通过在Bean中定义init-method 和 destory-method方法 public class Car { public Car() { System.out.println...Car's Init..."); } public void destory(){ System.out.println("Car's Destroy..."); } } @Bean...destroyMethod = "destory") public Car car(){ return new Car(); } 0x02: 通过@PostConstruct和@PreDestroy方法实现初始化和销毁...bean之前进行的操作 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @Service public...Customer clean up"); } } 这两个注解是JDK自带的,因此与Spring的耦合性较低(必须要Spring扫描到这个java类才能执行使用该注解的方法) 0x03: 通过bean
源码分析的时候,留下两个重要的步骤还没有说,一个是属性赋值的populateBean()(依赖注入),还有一个就是赋值后对Bean的一些初始化操作:initializeBean() Spring源码基于的...进行Bean的初始化工作 上面步骤已经完成了Bean的属性的赋值工作,接下里就进行Bean的一些初始化工作,其中包括: 1:Bean后置处理器初始化 2:Bean的一些初始化方法的执行init-method...mbd.isSynthetic()) { // 执行所有的BeanPostProcessor#postProcessBeforeInitialization 初始化之前的处理器方法 //...相当于当Servlet是以Bean的形式注入容器的时候,Bean初始化完成后,会自动调用它的init方法~~~~~~~~ //如果config为null,那么它传入可能为代理的DelegatingServletConfig...接口初始化 (如果配置了method-init,则调用其方法初始化 ) 调用applyBeanPostProcessorsAfterInitialization 初始化之后的处置操作 总结 populateBean
initialization 和 destroy 有时需要在 Bean 属性值 set 好之后和 Bean 销毁之前做一些事情,比如检查 Bean 中某个属性是否被正常的设置好值。...() 方法可以在销毁Bean之前做一些操作。...在 bean 的配置文件中指定 init-method 和 destroy-method 方法 Spring 允许我们创建自己的 init 方法和 destroy 方法,只要在 Bean 的配置文件中指定...init-method 和 destroy-method 的值就可以在 Bean 初始化时和销毁之前执行一些操作。...Exception { System.out.println("执行配置的 destroy-method"); } // 通过 init-method 属性指定的初始化方法
在Spring Boot:定制自己的starter一文提到,只要DbCountRunner这个类在classpath路径下,Spring Boot会自动创建对应的spring bean并添加到应用程序上下文中...在文章最后提到,Spring Boot的自动配置机制依靠@ConditionalOnMissingBean注解判断是否执行初始化代码,即如果用户已经创建了bean,则相关的初始化代码不再执行。...现在在上篇文章的基础上进行演示,看看@ConditionalOnMissingBean注解的作用。...DbCountAutoConfiguration的自动配置信息 在BookPubApplication类中定义DbCountRunner的spring bean @Bean public DbCountRunner...手动配置的Bean优先 ? 修改后的日志信息,显示手动配置bean
领取专属 10元无门槛券
手把手带您无忧上云