У меня есть сервлет, который имеет возможности автоматического подключения Spring, используя:
WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext())
.getAutowireCapableBeanFactory().autowireBean(this);
Когда я автоматически подключаю свои бины, SonarQube предупреждает с помощью `У сервлетов не должно быть изменяемых полей экземпляра (squid: S2226)
@Autowired
MyBean myBean;
Это ошибка SonarQube, которая игнорирует автоматическое подключение Spring? Могу ли я добавить другую аннотацию, чтобы предотвратить это предупреждение? я что-то упустил?
По контракту контейнер сервлета создает один экземпляр каждого сервлета, а затем к каждому новому входящему HTTP-запросу присоединяется выделенный поток для его обработки. Таким образом, все потоки совместно используют экземпляры сервлета и, соответственно, свои поля экземпляров. Во избежание недопонимания и непредвиденного поведения во время выполнения все поля сервлета должны быть статическими и / или окончательными или просто удалены.
EDIT
Я обнаружил похожую проблему , исправленную в @Inject
Java, которая не должна вызывать это предупреждение
На практике, когда поле помечено @Inject, оно не будет видоизменено.
Таким образом, поля, отмеченные этой аннотацией, не должны вызывать проблему RSPEC-2226.
РЕДАКТИРОВАТЬ 2
Открыть потенциальную ложную положительную проблему в SonarSource Community