受Spring管理的service层利用service的引用调用本类方法报空指针异常
1.这是类名
@Service("fileInfoService")
public class FileInfoServiceImpl implements FileInfoService {
private Logger logger = LoggerFactory.getLogger(FileInfoServiceImpl.class);
@Resource
private FileInfoMapper<FileInfo, FileInfoQuery> fileInfoMapper;
@Resource
private RedisComponent redisComponent;
@Resource
private UserInfoService userInfoService;
@Resource
private AppConfig appConfig;
@Lazy
@Resource
private FileInfoServiceImpl fileInfoService;
//使用@Lazy注解是由于其中一个方法调用了另一个使用@async注解的异步方法,为了受spring管理,必须使用fileInfoService调用这个
//异步方法,因此产生循环依赖,所以使用@Lazy注解解决循环依赖
2.这是方法名
@Override
@Transactional
public void delFile(String userId, String fileIds) {
String[] fileIdArray = fileIds.split(",");
FileInfoQuery fileInfoQuery = new FileInfoQuery();
fileInfoQuery.setFileIdArray(fileIdArray);
fileInfoQuery.setUserId(userId);
fileInfoQuery.setDelFlag(FileDelFlagEnums.USING.getFlag());
List<FileInfo> fileInfoList = fileInfoService.findListByParam(fileInfoQuery);
if (CollectionUtils.isEmpty(fileInfoList)) {
return;
}
//先删除子目录及文件
List<String> delFilePidList = new ArrayList<>();
for (FileInfo fileInfo : fileInfoList) {
//这里没有报空指针异常
** fileInfoService.findAllSubFolderFileIdList(delFilePidList, userId, fileInfo.getFileId(), FileDelFlagEnums.USING.getFlag());**
}
if (!CollectionUtils.isEmpty(delFilePidList)) {
FileInfo updateFileInfo = new FileInfo();
updateFileInfo.setDelFlag(FileDelFlagEnums.DEL.getFlag());
this.updateFileDelFlagBatch(updateFileInfo, userId, delFilePidList, null, FileDelFlagEnums.USING.getFlag());
}
//再删除自己的文件
List<String> fileIdList = Arrays.asList(fileIds);
FileInfo updateFileInfo = new FileInfo();
updateFileInfo.setDelFlag(FileDelFlagEnums.RECYCLE.getFlag());
updateFileInfo.setRecoveryTime(new Date());
this.updateFileDelFlagBatch(updateFileInfo, userId, null, fileIdList, FileDelFlagEnums.USING.getFlag());
}
private void findAllSubFolderFileIdList(List<String> delFilePidList, String userId, String fileId, Integer flag) {
delFilePidList.add(fileId);
FileInfoQuery fileInfoQuery = new FileInfoQuery();
fileInfoQuery.setUserId(userId);
fileInfoQuery.setFilePid(fileId);
fileInfoQuery.setDelFlag(flag);
fileInfoQuery.setFolderType(FileFolderTypeEnums.FOLDER.getType());
//就是在这里报了空指针异常
**List<FileInfo> fileInfos = fileInfoService.findListByParam(fileInfoQuery);**
for (FileInfo fileInfo : fileInfos) {
findAllSubFolderFileIdList(delFilePidList, userId, fileInfo.getFileId(), flag);
}
}
在delFile方法里使用 ** fileInfoService.findAllSubFolderFileIdList**(delFilePidList, userId, fileInfo.getFileId(), FileDelFlagEnums.USING.getFlag());这样的方法调用没有报空指针
但是在findAllSubFolderFileIdList这个方法里面使用List fileInfos = fileInfoService.findListByParam(fileInfoQuery);这样的方式就报了空指针,求解答