小編給大家分享一下在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 servRevMapper 類在測試的時候注入的好好地,為毛在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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。