在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();
}

這個方法主觀上感覺不是很好,先這樣吧!

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: