有什么方法可以更好地进行注射吗?
@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;
}