这一小节视频中,老师是在启动类中加@PostConstruct,其实也可以直接创建一个配置类,SystemConstantsConfig.java,然后在该配置类中写init方法并在方法上加上@PostConstruct注解也是一样的,这样的话就保持了启动类整洁
package com.example.emos.wx.config;
import cn.hutool.core.util.StrUtil;
import com.example.emos.wx.db.dao.SysConfigDao;
import com.example.emos.wx.db.pojo.SysConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Description:常量配置类
* @date 2021/8/25 17:10
*/
@Configuration
@Slf4j
public class SystemConstantsConfig {
@Resource
private SysConfigDao sysConfigDao;
@Resource(name = "systemConstants")
private SystemConstants systemConstants;
@PostConstruct
public void init() {
// 调用sysConfigDao查询所有的方法
List<SysConfig> sysConfigList = sysConfigDao.selectAllParam();
// 遍历sysConfigList
for (SysConfig sysConfig : sysConfigList) {
String key = sysConfig.getParamKey();
// 将key进行驼峰转换
key = StrUtil.toCamelCase( key );
// 获取值
String value = sysConfig.getParamValue();
try {
// 通过反射获取systemConstants常量类中的字段名
Field field = systemConstants.getClass().getDeclaredField( key );
// 给字段名设置值
field.set( systemConstants, value );
} catch (NoSuchFieldException e) {
log.error( "执行异常", e );
} catch (IllegalAccessException e) {
log.error( "执行异常", e );
}
}
// 打印到控制台
System.out.println(systemConstants.toString());
}
}springboot项目运行结果没有报错,常量类正常注入值:
