什么是 InitializingBean
?
InitializingBean
是 Spring 自带的一个接口,用于定义 Bean 初始化后需要完成的额外操作。换句话说,当 Spring 完成 Bean 的依赖注入和创建后,如果某些属性需要根据具体业务逻辑动态赋值或者这一 Bean 有初始化需求,InitializingBean
可以帮助我们实现。
定义及关键方法
它很简单,只有一个方法需要实现:
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
使用场景
- 动态完成对象属性的初始化: 在 Bean 的属性被赋值后,你可以基于这些属性完成其他初始化工作。
- 确保依赖 Bean 初始化后的逻辑正确性: 处理一些需要所有属性确定后的初始化任务(例如连接池的初始化、文件资源的加载)。
示例代码
假设我们有一个 数据库连接管理器,需要在属性注入后动态初始化连接池:
public class DatabaseConnectionPool implements InitializingBean {
private String connectionUrl;
private int poolSize;
public DatabaseConnectionPool(String connectionUrl, int poolSize) {
this.connectionUrl = connectionUrl;
this.poolSize = poolSize;
}
@Override
public void afterPropertiesSet() throws Exception {
// 初始化连接池
System.out.println("Initializing connection pool...");
System.out.printf("URL: %s, Pool size: %d%n", connectionUrl, poolSize);
// 实际上可以完成诸如打开资源等任务
}
public void testConnection() {
System.out.println("Testing database connection...");
}
}
或者是
* Redis Key 序列化
* 这个类实现了一个用于 Redis 的 Key 序列化器。它的主要目的是将 Redis 的键(Key)进行序列化和反序列化操作,
* 并在此过程中添加一个自定义的前缀和进行编码处理。下面我们将详细分析它的整体设计和功能实现。
*
*
* RedisSerializer 是 Spring Data Redis 框架中的一个接口,用于定义如何将数据进行 序列化和反序列化。
* 在 Redis 中,所有存储的数据(包括键和值)都以 字节数组 (byte[]) 的形式传输和保存
@RequiredArgsConstructor
public class RedisKeySerializer implements InitializingBean, RedisSerializer<String> {
private final String keyPrefix;
private final String charsetName;
private Charset charset;
@Override
public byte[] serialize(String key) throws SerializationException {
String builderKey = keyPrefix + key;
return builderKey.getBytes();
}
@Override
public String deserialize(byte[] bytes) throws SerializationException {
return new String(bytes, charset);
}
@Override
public void afterPropertiesSet() throws Exception {
charset = Charset.forName(charsetName);
}
}