欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在service层注入mapper时报空指针的解决

程序员文章站 2022-03-27 18:26:14
在service层注入mapper时报空指针今天又遇到一个极其刁钻的问题,废话不多说先上代码,测试单元@runwith(springrunner.class)@springboottest(class...

在service层注入mapper时报空指针

今天又遇到一个极其刁钻的问题,废话不多说先上代码,测试单元

@runwith(springrunner.class)
@springboottest(classes = springboot_run.class)
@contextconfiguration(locations = { "classpath:mybatis/mappers/revmapper.xml" })
public class testtransaction {
 @autowired
 revmapper remapper;
 @test
 public void testinsert() {
  redata data = new redata();
  data.setretime(new date()).setseid("fdewfcdsfdssdfdsf").setsenddate(new date());
  remapper.insertobject(data);
 }

然后是service代码

public class reservice {
 
 @autowired
 private revmapper remapper;
 private socket socket=null;
 private bufferedreader br=null;
 private printwriter pw=null;
 public void recevice() {
  try {
    //创建服务器,并开放3081端口
      serversocket serv

revmapper 类在测试的时候注入的好好地,为毛在service中就是空,一直空,空空空!!!

网上说的@mapperscan还有@mapper的注解我都加了一遍,这是为毛!!!!!

在博览全部大神的csdn中,我发现大家都是抄过来抄过去,小弟佩服!!

解决!!!

因为我在启动类是这样写的

@springbootapplication(exclude=datasourceautoconfiguration.class)
@mapperscan(“cn.yungtay.mapper”)
public class springboot_run {
public static void main(string[] args) {
 springapplication.run(springboot_run.class, args);
 remapper re=new remapper();
 re.receive;
}
}

厉害的欧巴们不要喷,我第一反应是这样的!!

问题出来了,当一个对象是new出来的时候,他是不交给spring管理的,所以对象根本注入不进去,null是理所当然的

第二个问题,你想一个方法随着主启动类而启动,你可以这么干

@service
public class reservice implements applicationrunner{
@autowired
private revmapper remapper;
private socket socket=null;
。。。。。。。。。。。。。
@override
public void run(applicationarguments args) throws exception {
 // todo auto-generated method stub
 你所需要启动的方法xxxxxxxx
}

感觉自己又智慧了一点!

springmvc普通类(非control,service)注入mapper为null

在给项目写一个定时器的时候,需要用到注入mapper进行数据库操作,用像serviceimpl里的注入

@autowired
usermapper usermapper; 

无效,debug后发现usemapper为null,说明没有注入成功

后看到其他文章知道了new出来的thread不在spring的容器中,所以无法注入成功,获得bean

但是按照他的方法依旧为null,他的想法是主动注入bean,应该是对的。

不过我这个可能有点特殊,于是最后只能使用终极大法

applicationcontext  ac = new classpathxmlapplicationcontext("classpath:applicationcontext.xml");
usermapper = (usermapper) ac.getbean("usermapper");
usermapper.deleteallcookies();

不要忘了给mapper个名字,例

@repository(value="usermapper")
public interface usermapper {
public list<user> selectbyexample(@param("username1")string username,@param("password")string password);
public int inserttoken(@param("username1")string username,@param("token")string token);
public string checktoken(string token);
public int logout(@param("username1")string username,@param("token")string token);
public int deleteallcookies();
}

这个方法主观上感觉不是很好,先这样吧!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。