也许我们会碰到这样的场景:
我们想在spring的所有bean初始化完毕之后执行一些bean的init操作
如果我们基于spring开发application,那么我们可能的做法就是,在调用spring初始化完毕之后接着去写我们的代码来初始化
如果我们基于spring开发web,那么我们很可能自定义一个listener,放在spring的listener之后去完成我们的初始化。
无论是哪种,我们都需要从spring获取我们的bean,然后调用bean的init方法
其实,(-------------------------华丽的分割线-------------------)
我们可以借助spring的事件去完成我们的场景。具体如下:
我们可能会定义这样一个借口:
public interface initializable { public void init();}
我们希望所有需要init的bean都实现这个借口,然后我们在springbean初始化之后统一去init
spring bean初始化的event是:contextrefreshedevent,我们写一个listener去监听这个event,代码如下:
@componentpublic class initor implements applicationlistener { @autowired(required=false) list<initializable> initors; @override public void onapplicationevent(applicationevent event) { if(null==initors) { return; } if(event instanceof contextrefreshedevent) { for(initializable initor:initors) { initor.init(); } } }}
当spring的context初始化完成之后就会触发contextrefreshedevent,此时我们根据这个判断,去完成我们的init
有兴趣的同学可以去看看其他的几种事件:
contextclosedevent----------context关闭时的事件
contextstartedevent---------context启动后的事件
contextstoppedevent--------context停止后的事件
注意:如果希望是在bean初始化之后去init,那么只需要配置init-method就可以了,和本文讨论的场景是不一样的。
分享到:
相关推荐
我们还可以在XML配置中定义Bean的初始化方法(`init-method`)和销毁方法(`destroy-method`),Spring容器会在适当的时间调用这些方法。 9. **Spring容器的启动与Bean的生命周期**: 一旦XML配置加载到Spring...
在Spring中,Bean的生命周期包括实例化、初始化、正常服务和销毁等阶段。通常,Spring容器会在应用启动时扫描配置文件,创建并初始化所有定义的Bean。然而,通过动态加载,我们可以避免不必要的初始化,直到真正需要...
此外,`<bean>`元素还支持通过`init-method`和`destroy-method`属性指定bean的初始化和销毁方法,以进行自定义的生命周期管理。 `spring-context-4.2.xsd`还定义了处理bean作用域(scope)、AOP代理(proxy)、事件...
在Spring框架的XML配置中,`<context-param>`和`<init-param>`是两种不同的参数配置方式,它们各自有特定的用途和作用范围。这里我们将深入探讨这两种参数的区别,并通过实际应用来理解它们。 首先,`<context-...
- **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和依赖关系,提供了低级别的配置选项。 - **ApplicationContext** 是BeanFactory的扩展,增加了更多面向应用...
在 Spring 中,可以使用 `init-method` 和 `destroy-method` 属性来指定 Bean 的初始化和销毁方法。 Bean 是 Spring 框架中的核心组件,理解 Bean 的概念、配置、实例化和生命周期是使用 Spring 框架的基础。
Spring允许我们定义Bean的生命周期,如初始化方法和销毁方法。使用`@PostConstruct`和`@PreDestroy`注解来指定这些方法。 ```java @Service public class MyService { @PostConstruct public void init() { // ...
postProcessAfterInitialization方法,在Spring中定义的Bean初始化后调用这个方法。 三、 Spring容器加载完成后执行从spring监听器作为入口。org.springframework.web.context.ContextLoaderListener找到初始化...
6. **生命周期方法**:使用`@PostConstruct`和`@PreDestroy`注解来定义Bean初始化和销毁时执行的方法。 ```java @Service public class ServiceWithLifecycle { @PostConstruct public void init() { // 初始化...
5. `init-method`和`destroy-method`:指定bean初始化和销毁时要调用的方法。 6. `<import>`:引入其他配置文件,方便模块化和复用。 7. `<context:component-scan>`:通过注解扫描特定包下的类,自动发现并注册带...
6. **初始化回调**:所有bean实例化和依赖注入完成后,Spring会调用那些声明了初始化方法(init-method)的bean。这允许开发者在bean完全准备好使用之前执行自定义逻辑。 7. **事件发布**:最后,`...
在bean实例化后,Spring允许开发者定义初始化回调方法(`init-method`),这些方法会在bean初始化完成后执行。同时,Spring还提供了`BeanPostProcessor`接口,允许自定义逻辑在bean实例化和初始化之后进行干预。 ...
Spring的WEB模块提供了构建Web应用程序的基础架构,包括支持多部分文件上传、使用Servlet监听器初始化IoC容器以及集成Spring MVC。 70、解释Spring配置文件。 Spring配置文件是一个XML文件,它包含了应用程序中Bean...
* Servlet、Filter、Interceptor 等,接口中都有 void init() 初始化方法、void destroy() 销毁方法 依赖注入 * 构造器注入 * 属性注入 p 名称空间的支持 * 引入 p 名称空间 * 使用 p 名称空间注入属性 SpEL:...
2. **Bean的生命周期管理**:Spring Context负责创建、初始化、管理和销毁bean。它支持各种生命周期回调方法,如`init-method`和`destroy-method`,使得开发者可以在特定阶段执行自定义逻辑。 3. **依赖注入**:这...
- 可以通过`init-method`属性指定初始化方法,如`<bean id="product" class="xxx.Product" init-method="myInit"/>`,当Bean被创建后会调用`myInit`方法。 5. **接口初始化**: - `InitializingBean`接口提供了`...
spring的IOC: ... * 初始化 * 由spring容器调用init方法 * 在构造函数之后执行 * 销毁 * 如果是单例,则必须返回ClassPathXmlApplicationContext该容器,才能执行销毁工作 * 如果是多例,容器不负责销毁
例如,`scope`属性可以设置bean的作用域(如singleton、prototype等),`init-method`和`destroy-method`用于指定bean初始化和销毁时执行的方法。 此外,`pom.xml`文件展示了Maven的依赖管理,其中引入了Spring的...
@PostConstruct 是 JSR-250 规范的一部分,用于标记在 Bean 初始化后由 Spring 容器执行的方法。这意味着该方法会在所有依赖注入完成后调用,但在此之前。例如: ```java public class UserDaoImpl extends ...
无论使用`BeanFactory`还是`ApplicationContext`,Spring默认以单例(`singleton`)模式初始化bean。这意味着在整个应用中,每个bean只有一个实例。如果需要其他作用域,如原型(`prototype`),则需要在配置中指定...