SpotBugs标记为不安全的Spring依赖项注入



有什么方法可以更好地进行注射吗?

@Service
public class CountryServiceImpl implements CountryService {
private final UserSessionService userSessionService;
public CountryServiceImpl(final UserSessionService userSessionService) {
this.userSessionService = userSessionService; // SpotBugs warning
}
}

SpotBugs在标记的行上给我一个警告:

此代码将对外部可变对象的引用存储到对象的内部表示。如果实例由不受信任的代码,并且对可变对象的未经检查的更改将折衷安全性或其他重要属性,您将需要不同的东西。存储对象的副本是更好的方法许多情况。

@Autowired应该是最后一个选项,因为它删除了在集成测试期间注入模拟bean的能力。

就像SpotBugs建议的那样,您可以简单地创建userSessionService参数的副本(作为新对象(,然后直接分配这个参数而不是参数:


public CountryServiceImpl(final UserSessionService userSessionService) {
UserSessionService tempUserSessionService = new UserSessionService(userSessionService.getFirst(),
userSessionService.getSecond() [...])
this.userSessionService = tempUserSessionService; 
}

最新更新