Test測試:Spring 注入失敗,空指標
阿新 • • 發佈:2019-02-15
問題描述
使用註解無法注入例項,出現空指標異常。若不用註解,直接new一個例項,可以正常執行
控制檯輸出
異常發生點
@Resource
private UserService userService;
private LocalDateTime time = LocalDateTime.now();
@Test
public void addUser() throws Exception {
SysUser sysUser = new SysUser();
sysUser.setUsername("admin" );
sysUser.setPassword("admin");
sysUser.setCreateTime(time);
sysUser.setLoginTime(time);
sysUser.setLoginIp("192.168.1.1");
sysUser.setLogoutTime(time);
sysUser.setEnabled(true);
logger.info("---sysUser:{}",sysUser);
userService.addUser(sysUser); //這裡出現空指標異常
}
Service檔案
/**
* 業務層--使用者
*/
@Service
public class UserServiceImpl implements UserService {
@Resource
private BaseService baseService;
@Resource
private UserDao userDao;
private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
/**
* 增加:使用者
* 資料庫:sys_user
*
* @param sysUser 使用者
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void addUser(SysUser sysUser) {
logger.info("---baseService:{}", baseService);
try {
logger.info("---sysUserOld:{}", sysUser);
SysUser user = baseService.passwordHelper(sysUser);
logger.info("---sysUserNew:{}", user);
userDao.save(user);
} catch (Exception e) {
logger.info("---新增使用者:出現異常");
e.printStackTrace();
}
}
}
配置檔案
Spring:applicationContext.xml
<!--配置自動掃描的包-->
<context:annotation-config/>
<context:component-scan base-package="com.security.demo.service"/>
<context:component-scan base-package="com.security.demo.dao"/>
SpringMVC:spring-mvc.xml
<!--配置自動掃描的包-->
<context:component-scan base-package="com.security.demo.controller"/>
包掃描沒有衝突。假若包有衝突,可以看這裡解釋
發現關鍵
在處理過程中,突然發現,不通過 Test,使用Controller呼叫Service,又能正常執行,那麼問題出現在Test檔案這裡。
解決
Test檔案放的位置不對,test檔案放在main裡面去了。
maven標準目錄結構