工具类中使用@Autowired注入为null的问题_κ青橘柠檬的博客-程序员宅基地_autowired注入mapper为null

技术标签: java  

这里遇到的问题是:
1、一般工具类中的方法都是静态的,而在静态方法中又不能直接使用注入的mapper。如:
//注入

@Autowired
private SmsLogMapper mapper;

//方法
public static String sendSms(String mobile) {
//这里不能直接用mapper,因为mapper不是静态
}
2、第二个问题是,如果把mapper改为静态的,则在方法中使用时,mapper就是null。

解决方法
在工具类上添加@Component注解将工具类实例到spring容器中;
使用@PostConstruct注解初始化工具类和mapper,如下:

@Component
public class DynamicColumnUtils {
    @Resource
    private  ISystemRemoteService systemRemoteService;
    @Resource
    private  CoreTablecolumnMapper coreTablecolumnMapper;
    //当前工具类
    private static DynamicColumnUtils dynamicColumnUtils;

    @PostConstruct
    public void init() {
        dynamicColumnUtils = this;
        dynamicColumnUtils.coreTablecolumnMapper = this.coreTablecolumnMapper;
        dynamicColumnUtils.systemRemoteService = this.systemRemoteService;
    }
    
public static Map<String, List<CoreTablecolumn>> getDynamicMap(Object object, String tableId) {
        Class<?> studentClass = object.getClass();
        Field[] fields = studentClass.getDeclaredFields();
        Map<String, List<CoreTablecolumn>> map = new HashMap<>();
        //实体类的属性字段
        List<String> nameList = Arrays.stream(fields).map(Field::getName).collect(Collectors.toList());
        List<CoreTablecolumn> allCoreTablecolumns = dynamicColumnUtils.coreTablecolumnMapper.selectByTableId("1", 107L, 239L, tableId);
        //远程调用用下面这行
        // List<CoreTablecolumn> allCoreTablecolumns = dynamicColumnUtils.systemRemoteService.getTableColumns(tableId).getResultData();
        List<CoreTablecolumn> coreTablecolumns = allCoreTablecolumns.stream().filter(item->!item.getTablecolumnNameEn().equals("id")).collect(Collectors.toList());

     
        List<CoreTablecolumn> dynamicColumnList = coreTablecolumns.stream().filter(item -> !nameList.contains(item.getTablecolumnNameEn())).collect(Collectors.toList());
        map.put("allColumns", coreTablecolumns);
        map.put("dynamicColumns", dynamicColumnList);
        return map;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Arry_Coding/article/details/119774566

智能推荐

《Unity3D网络游戏实战》第2章_yxqq378287007的博客-程序员宅基地

《Unity3D网络游戏实战》第2章异步代码异步客户端异步代码Async.csusing System;using System.Threading;namespace Async { class MainClass { public static void Main (string[] args) { Timer timer = new Timer(Timeout, null, 2000, 0); Thread.Sleep(2000*2); Console.WriteL

安装系统_iefanrui的博客-程序员宅基地

第一步、准备工作    安装系统前要做一些准备工作,首先是制作你要安装的系统的系统镜像。制作系统镜像要先下载一个UltraISO软件。然后右键点击选择“以管理员的身份运行”(注意:必须这样做)。打开后点击左上角的“文件”-—“打开”,找到存放系统镜像的目录,选中系统镜像,然后点击“打开”。然后点击 “启动”—“开始硬盘录入”,然后选择一个U盘作为系统启动盘(注意:这个U盘必须足够大,一般16G的就...

pv3d 的 Camera3D练习_suzhou_boy1的博客-程序员宅基地

 http://www.sandy1219.com/3d/test2/testflabcamera.html  package{ import flab3d.FlabCamera3D; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.Stage

CAsyncSocket::Send()、OnSend()_hahahapeige的博客-程序员宅基地

virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0);Dialog中Socket设置AsyncSelect(FD_WRITE),触发虚函数OnSend(),之后调用Send()发送消息。参数lpBuf包含要传输的数据的缓冲区。nBufLen中的数据的长度lpBuf以字节为单位。nFlags...

怎么学python-新手如何自学python课程?_weixin_37988176的博客-程序员宅基地

为了Python的自学党们,传智播客真的是拼了,今天给大家讲讲新手如何自学python课程?传智播客不仅有“人工智能+Python学习路线图”,还根据以往的经验,总结出学习Python之前的各种问题,想详细了解,从此贴开始吧!!!想学Python就已经迈出了通向成功的第一步,想要通过自学成才的话,是需要很大的毅力和吃苦精神,切忌三天打鱼两天晒网。建议通过我们传智黑马论坛的python相关帖子来一步...

利用compositionstart/end事件监听输入法事件_青山院长白菜的博客-程序员宅基地_compositionstart

var flag = false;document.querySelector('input').oninput = function() { setTimeout(() =&amp;gt; { if (!flag) console.log(this.value); }, 0);};document.querySelector('input').onkeyup = function(...

随便推点

Android.mk 文件语法详解_一米阳光-ing的博客-程序员宅基地

转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html=====================================================================================0. Android.mk简介:Android.mk文件用来告知NDK Build 系统关于Source的信息...

交换排序_hailushijie的博客-程序员宅基地

/** * 从0位置开始,依次和后面所有元素进行比较,并将小数交换到前面。 * o(N*N) * @author *冒泡排序,选择排序,插入排序,交换排序属于简单排序方法 */public class ExchangeSort { private static int[] array = new int[]{1,8,2,9,3,7,11,23,90,4,5}; public sta

day03-分支结构switch语句、循环语句、Random随机数_BY_WJL的博客-程序员宅基地

1. switch语句1.1 分支语句switch语句格式switch (表达式) { case 1: 语句体1; break; case 2: 语句体2; break; ... default: 语句体n+1; break;}执行流程:首先计算出表达式的值其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结

平面物理引擎(我们的星星)1.0--效果_断水客的博客-程序员宅基地

作为这个系列的补充篇(放在1.1之前的1.0),我们不看代码,先看看这个星星类的使用效果,看看我们的星星的表现。

数据库之联合查询_Echo佩雨的博客-程序员宅基地_数据库联合

数据库之联合查询联合查询: 将多次查询(多条select语句),在记录上进行拼接(字段不会增加)基本语法多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)select 语句1unionselect 语句2Union选项 : 与select选项一样有两个All:保留全部(不管重复)Distinct:去重(整个重复):默认的mysq...

常用html、CSS、javascript前端命名规范_weixin_33834910的博客-程序员宅基地

无意发现自己文件夹里面有这么一个文件,具体从哪里来的不记得了,仔细看下,发现总结的挺好的,贴出来分享一下。无论是从技术角度还是开发视角,对于web前端开发规范文档都有一定规范,本文就css3和html5的发展前景总结了一系列的web开发文档,仅供大家参考。规范目的:为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档...