常见业务:初始化系统账户

本文介绍了两种初始化系统账户的方法:通过Spring监听器和使用InitializingBean接口。监听器利用Spring容器启动,而InitializingBean则在Spring初始化时执行。文章详细阐述了相关原理,并提到Bean的生命周期,包括InitializatingBean接口的作用,以及BeanNameAware接口如何帮助获取Bean的ID。
摘要由CSDN通过智能技术生成

一般来说,初始化系统账户有两种方法

  • A. 启用监听器,监听容器的启动

  • B. 采用Spring自带的InitalizingBean

A.使用监听器做初始化系统账户

此处采用Spring自带的监听器进行监听,原因是:ServletContext监听器只能监听WEB容器的启动,无法监听Spring容器的启动

原因很简单:WEB容器的启动早于Spring容器

在这里插入图片描述

@Component
public class InitSystemAccountListener implements ApplicationListener<ContextRefreshedEvent>{


	//注入所需的Service
	@Autowired 
	private ISystemAccountService systemAccountService;

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event){
		//在这里写入初始化系统账户的方法即可
		 systemAccountService.initSystemAccount();
	}
}

B.InitalizingBean

具体原理:

在这里插入图片描述

说明:主要是调用Spring在初始化Bean的方法

这里先说原理:很简单:就是在Spring初始化的时候,执行该方法,而且就一次,对,就这么简单

具体原理如下图:

在这里插入图片描述

具体的代码如下:

@Service
public class SystemAccountServiceImpl implements ISystemAccountService,InitializingBean{
 
	@Autowired
	private SystemAccountMapper systemAccountMapper;

	@Override
	public void initSystemAccount(){
		
			//查询系统账户
			SystemAccount sc = systemAccountService.getCurrent();
			
			//假如没有查询到系统账户
			if(!Optional.ofNullable(sc).isPresent()){
					this.initSystemAccount();
			}

	}
	
	//说明系统的初始化方法
	public void initSystemAccount(){
		
		SystemAccount sc = new SystemAccount();
		
		systemAccountMapper.insert(sc);

	}
}

如果以上在重启容器之后,成功地插入了一条系统数据,那么就说明命令执行成功了。

附带说明:使用到的知识:Bean的生命周期

那么现在具体说明一下关于Bean的生命周期以及解释一下相关的术语:

在这里插入图片描述

其中完成系统初始化的关键就是:
InitializatingBean接口,具体作用如图,Bean初始化的时候会去检查是否实现了该接口。

其中值得一提的是:BeanNameAware接口(图中标注为BeanAware应该有误)
在Spring中,该接口用于感知Bean对应的BeanId,假如没有实现该接口,那么就无法找到该Bean对应的ID属性

参考文章:

Bean的生命周期:https://www.cnblogs.com/redcool/p/6397398.html
BeanNameAware的作用:https://www.jianshu.com/p/c5c61c31080b
Bean的Processor:https://www.jianshu.com/p/a90a3e617ba6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值