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

 更新时间:2021年6月18日 00:02  
这篇文章主要介绍了在service层注入mapper时报空指针的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在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中就是空,一直空,空空空!!!

[email protected]@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();
}

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

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

相关文章

  • mybatis mapper互相引用resultMap启动出错的解决

    这篇文章主要介绍了mybatis mapper互相引用resultMap启动出错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-25
  • SpringBoot调用第三方WebService接口的操作技巧(.wsdl与.asmx类型)

    这篇文章主要介绍了SpringBoot调第三方WebService接口的操作代码(.wsdl与.asmx类型 ),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-28
  • 网站出现service unavailable的解决方法

    本文的教程仅适合采用windows服务器的IIS组件上操作,service unavailable是许多网站会经常遇到的问题,希望对大家有用。 昨天一小段时间网站出现了service unavailable,于是笔者紧急的解决了此问题,据悉Service Unavailable是一种系统的警告提示。...2013-08-11