1、需求
在我们写类时想要将其作为bean并在其初始化时才注入一些规则或拓展一些功能,比如白名单验证工具类初始化时读取白名单属性文件将其初始化为列表;或是在适配类中注入多个实现类,根据传参再决定调用哪个实现
2、准备及原理
- 实现InitializingBean,重写其afterPropertiesSet()方法
- 众所周知,Bean生命周期为 实例化 -> 属性赋值 -> 初始化 -> 销毁 四个阶段,初始化之后Bean才可以被使用,所以我们重点关注初始化阶段
- 初始化时容器会检查Bean是否实现了InitializingBean接口,若实现则会执行其afterPropertiesSet(),对Bean进行初始化增强
3、代码
- 白名单验证工具类初始化时读取白名单属性文件将其初始化为列表
@Component
@Slf4j
public class WhiteListUtil implements InitializingBean {
//白名单列表
private List<String> list = ListUtil.empty();
//供外部调用的方法,返回白名单列表
public List<String> load() {
return list;
}
@Override
public void afterPropertiesSet(){
//读取白名单文件
ClassPathResource classPathResource = new ClassPathResource("/conf/white-list.conf");
if (!classPathResource.exists()