spring bean中构造函数,afterPropertiesSet和init-method的执行顺序
时间: 2024-06-04 14:09:16 浏览: 19
在Spring容器中,Bean的初始化顺序通常是:
1. 实例化Bean
2. 设置Bean的属性值
3. 如果Bean实现了`InitializingBean`接口,则调用其`afterPropertiesSet()`方法
4. 如果在xml配置文件中定义了`init-method`属性,则调用其指定的初始化方法
因此,构造函数是在Bean实例化时首先调用的,然后是设置Bean的属性值,然后是`afterPropertiesSet()`方法和`init-method`方法的调用。但是,需要注意的是,如果Bean未实现`InitializingBean`接口或未在xml配置文件中定义`init-method`属性,则不会调用这两个方法。
相关问题
@PostConstruct > afterPropertiesSet() > initMethod()执行顺序对吗
是的,这三个方法都是在 Spring 容器实例化 Bean 后,在属性填充后,执行初始化操作时调用的。它们的执行顺序是:@PostConstruct -> afterPropertiesSet() -> initMethod()。其中,@PostConstruct 是 JSR-250 规范中定义的注解,它表示在构造函数执行之后,属性注入之前执行;afterPropertiesSet() 是 InitializingBean 接口中定义的方法,它表示在属性注入之后执行;initMethod() 是自定义的初始化方法,它表示在属性注入之后执行。需要注意的是,如果一个 Bean 同时使用了这三种方式指定了初始化方法,那么它们的执行顺序是固定的,即按照上述顺序执行。
简述spring 容器中bean的生命周期
Spring容器中的Bean的生命周期包括以下几个阶段:
1. 实例化(Instantiation):当Spring容器启动时,它会根据配置信息实例化所有的Bean。这是通过调用Bean的构造函数来完成的。
2. 属性填充(Population):在实例化Bean后,Spring容器会通过调用Bean的setter方法或通过反射直接注入属性来填充Bean的属性。
3. 初始化(Initialization):在属性填充完成后,Spring容器会调用Bean的初始化方法。Bean的初始化方法可以通过实现InitializingBean接口的afterPropertiesSet()方法,或者通过在配置文件中指定init-method属性来定义。
4. 销毁(Destruction):在Spring容器关闭时或者应用程序上下文被销毁时,Spring容器会调用Bean的销毁方法。Bean的销毁方法可以通过实现DisposableBean接口的destroy()方法,或者通过在配置文件中指定destroy-method属性来定义。
在Bean的生命周期中,还有一些可选的扩展点,如BeanPostProcessor接口和Aware接口。BeanPostProcessor接口可以在Bean实例化、属性填充和初始化的过程中对Bean进行额外的处理。而Aware接口允许Bean获取Spring容器的相关资源。