1.初始化回调
实现org.springframework.beans.factory.InitializingBean接口允许容器在设置好bean的所有必要属性后,执行初始化事宜。InitializingBean接口仅指定了一个方法:
void afterPropertiesSet() throws Exception;
通常,要避免使用InitializingBean接口(而且不鼓励使用该接口,因为这样会将代码和Spring耦合起来)可以在Bean定义中指定一个普通的初始化方法,即在XML配置文件中通过指定init-method属性来完成。如下面的定义所示:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean {
public void init() {
// do some initialization work
}
}
(效果)与下面完全一样
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements InitializingBean {
public void afterPropertiesSet() {
// do some initialization work
}
}
但是没有将代码与Spring耦合在一起。
析构回调
实现org.springframework.beans.factory.DisposableBean接口的bean允许在容器销毁该bean的时候获得一次回调。DisposableBean接口也只规定了一个方法:
void destroy() throws Exception;
通常,要避免使用DisposableBean标志接口(而且不鼓励使用该接口,因为这样会将代码与Spring耦合在一起)可以在bean定义中指定一个普通的析构方法,即在XML配置文件中通过指定destroy-method属性来完成。如下面的定义所示:
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
public class ExampleBean {
public void cleanup() {
// do some destruction work (like releasing pooled connections)
}
}
(效果)与下面完全一样
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work (like releasing pooled connections)
}
}
但是没有将代码与Spring耦合在一起。
3.缺省的初始化和析构方法
如果有人没有采用Spring所指定的InitializingBean和DisposableBean回调接口来编写初始化和析构方法回调,而且团队约到使用init(), initialize(),dispose()作为生命周期回调方法的名称,有了前面的约定,就可以将Spring容器配置成在每个bean上查找事先指定好的初始化和析构回调方法名称,这样就可以简化bean定义,比如根据约定将初始化回调命名为init(),我们举例如下:
public class DefaultBlogService implements BlogService {
private BlogDao blogDao;
public void setBlogDao(BlogDao blogDao) {
this.blogDao = blogDao;
}
// this is (unsurprisingly) the initialization callback method
public void init() {
if (this.blogDao == null) {
throw new IllegalStateException("The [blogDao] property must be set.");
}
}
}
为上述类所添加的XML配置,如下所示:
<beans default-init-method="init">
<bean id="blogService" class="com.foo.DefaultBlogService">
<property name="blogDao" ref="blogDao" />
</bean>
</beans>
该属性的出现意味着Spring IoC容器会把bean上名为'init'的方法识别为初始化方法回调,并且当bean被创建和装配的时候,如果bean类具有这样的方法,它将会在适当的时候被调用,类似的,配置析构方法回调是在顶层<beans/>元素上使用'default-destroy-method'属性。使用该特性可以使你免于在每个bean上指定初始化和析构方法回调的琐碎工作,同时它很好的强化了针对初始化和析构方法回调的命名约定的一致性(一致性是一种应该时常追求的东西)。
分享到:
相关推荐
此外,如果Bean实现了`InitializingBean`接口,Spring会调用`afterPropertiesSet()`方法。另外,还可以通过`init-method`属性指定一个非注解的方法作为初始化方法。 2. **依赖注入**:Spring会根据Bean定义中的属性...
标题中的"spring-lifecycle"暗示了这个项目专注于探索Spring框架中bean的生命周期管理。让我们深入了解一下Spring框架的生命周期及其相关的知识点。 在Spring中,bean的生命周期是指从创建到销毁的整个过程,它包括...
我们可以实现`Lifecycle`接口或`SmartLifecycle`接口,以便在Spring容器启动完成后触发自定义的初始化操作,例如启动Socket服务器。 1. **集成Socket服务**:在Spring中集成Socket服务,我们通常会使用`java.net....
在Spring框架中,ApplicationContext是应用的核心,它管理着所有Bean的生命周期。本章将深入探讨Spring应用上下文的生命周期,从启动准备阶段到关闭阶段,包括各个关键步骤和相关组件的作用。 1. **Spring 应用上...
3.5.1. Lifecycle接口 3.5.1.1. 初始化回调 3.5.1.2. 析构回调 3.5.2. 了解自己 3.5.2.1. BeanFactoryAware 3.5.2.2. BeanNameAware 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7....
它包括ArrayList、LinkedList、HashSet、HashMap等接口和类。ArrayList提供了基于索引的访问,适合频繁进行插入和删除操作;LinkedList则适合于迭代和添加元素,因为它的每个元素都有前驱和后继;HashSet存储不重复...
此外,Lifecycle接口允许自定义启动和停止逻辑。 4. **AOP(面向切面编程)** AOP是Spring提供的一种强大的代码组织方式,4.3版本支持声明式事务管理、日志记录、性能监控等功能。Pointcut和Advisor的概念使得切面...
3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 ...
3.5.1. Lifecycle接口 3.5.2. 了解自己 3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 ...
Spring提供了多种DI方式,包括构造器注入、setter注入和接口注入。开发者可以通过注解或XML配置来指定依赖关系。 **3. 模拟Spring的IOC容器** 要模拟Spring的IOC容器,我们需要实现以下几个核心功能: - **Bean...
<bean id="lifecyclebean" class="cn.itcast.spring.d_lifecycle.lifecyclebean" init-method="setup" destroy-method="teardown"> ``` - 需要注意的是,`destroy-method`仅对单例`scope="singleton"`的Bean...
1. **Lifecycle Callback**:包括初始化和销毁回调。可以通过实现InitializingBean接口、使用@PostConstruct注解、指定init-method,以及实现DisposableBean接口、使用@PreDestroy注解、指定destroy-method来分别...
Spring还提供了Lifecycle接口,允许更灵活的生命周期管理。这个接口包含start()和stop()方法,适合于那些需要启动和停止操作的Bean,比如数据库连接池。 在Spring容器中,Bean的生命周期还包括容器感知的初始化和...
本文将从实现的角度,通过对外部接口、内部实现、组成部分和执行过程四个角度深入剖析Spring IoC容器的结构。 首先,Spring IoC容器的外部接口主要包括`ApplicationContext`和`BeanFactory`。`BeanFactory`是IoC...
4. **执行器层**:负责流程的执行和调度,可以看作是执行引擎层与外部系统的接口。 5. **系统配置层(Top Layer)**:这一层主要处理系统级别的配置信息,如日志设置、安全策略等。 ### 二、流程定义 流程定义是...
- **Lifecycle Interfaces**:定义Bean的生命周期回调方法。 - **FactoryBean**:用于创建其他Bean的对象工厂。 - **Abstract and Child Bean Definitions**:允许创建抽象Bean和继承自抽象Bean的具体Bean。 ###...
17. **@InboundChannelAdapter and Smart Lifecycle for Annotated Endpoints**:增强了注解支持,使得创建复杂的集成组件变得更加容易。 18. **Twitter Search Outbound Gateway**:新增的支持使得可以从Twitter流...
可以通过`init-method`和`destroy-method`属性指定初始化和销毁方法,或者使用`Lifecycle`接口或`SmartLifecycle`接口来自定义生命周期行为。 9. **Bean的作用域** Spring Bean有多种作用域,如单例(Singleton)...
- **Lifecycle callbacks**:Bean 生命周期的方法回调。 - **Properties**:Bean 的属性值。 #### 十、Bean 的作用域 1. **singleton**:每个容器中只有一个实例。 2. **prototype**:每次请求都会创建一个新的...