小编给大家分享一下在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 }
感觉自己又智慧了一点!
在给项目写一个定时器的时候,需要用到注入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(); }
以上是“在service层注入mapper时报空指针怎么办”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。