软件编程
位置:首页>> 软件编程>> java编程>> 在service层注入mapper时报空指针的解决

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

作者:陆跑跑已胖哭 �  发布时间:2021-09-07 03:39:21 

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

网上说的@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();
}

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

来源:https://blog.csdn.net/ProgrammerAshley/article/details/97637109

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com