java service mapper,解决Java普通Utils类(非Controller、Service)注入mapper为null

在写一个敏感词过滤器Util的时候,需要注入mapper来进行数据库查询所有的敏感词,然后就向ServiceImpl里的注入一样写:

@Autowired

private SysSensitiveWordsMapper sensitiveWordsMapper

这时候注入的mapper为null,所有会报空指针异常,就算调用@Component注解加入还是为null(Utils工具类不是静态方法,注解注入的service和mapper是非静态的,也不行,即使把service和mapper注入为static静态的也还是会报空指针)

先贴一下我debug的异常:

917dd8697ec8b8d4022e2eaab4054d95.png

我自己尝试了一种方法,而且能成功注入mapper,这里做一下简单的记录:

@Component

public class FilterUtils {

@Autowired

private SysSensitiveWordsMapper sensitiveWordsMapper;

public static FilterUtils filterUtils;

@PostConstruct

public void init(){

filterUtils = this;

filterUtils.sensitiveWordsMapper = this.sensitiveWordsMapper;

}

public static ServerResponse findSensitiveWord(String body) {

SensitiveFilter filter = new SensitiveFilter();

Set sensitiveWordSet = new HashSet();

List txtList = filterUtils.sensitiveWordsMapper.selectAll(); // 查库获取所有的敏感词

for (int i = 0; i < txtList.size(); i++) {

String word = txtList.get(i).getWord();

//将敏感词插入hashSet中

sensitiveWordSet.add(word);

}

filter.init(sensitiveWordSet);

if (body != null) {

//判断检测内容不为空,则执行

boolean result = filter.contains(body);

String results = result ? null : "";

if (results == null) {

List set = filter.getSensitiveWord(body);

System.out.println("内容具有" + set.size() + "个敏感词:" + set);

return ServerResponse.createByErrorMessage("用户输入内容包含敏感词:" + set.toString() + ",请重新输入");

}

}

return ServerResponse.createBySuccess();

}

}

解决的关键是:需要将Utils类添加@Component注解注入Spring容器,添加init()方法,并用注解@PostConstruct注解修饰方法,  被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执行,将findSensitiveWord修改为静态static方法,并通过filterUtils.sensitiveWordsMapper.selectAll()的方式调用,结果能注入成功!

c14133fa0ddc7de86a0884f33e15a946.png

希望能帮助到你哈哈哈。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值