请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于常量类赋值

这一小节视频中,老师是在启动类中加@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项目运行结果没有报错,常量类正常注入值:

https://img1.sycdn.imooc.com//szimg/612623fb0962c1a311800267.jpg

正在回答 回答被采纳积分+3

1回答

神思者 2021-08-25 20:23:23

@PostConstruct和Java的静态语句块是同样的道理,只不过静态语句块里面获取Spring注入的值或者引用很麻烦,所以@PostConstruct比较推荐

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号