Сегодня утром я смотрел на кодовую базу в моей компании, и для меня это не было чем-то очень очевидным.Я работал с корпоративными проектами Spring MVC, но по своему опыту мне никогда не приходилось использовать прототип Scope.Я видел его использование в некоторых классах ранее, но это было что-то необычное для меня.
Codebase
@RestController
@Scope("prototype") // this is set due to BaseEntity.setEntityManager
@RequestMapping(path = "/baseurl")
public class SampleController {
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
BaseEntity.setEntityManager(entityManager);
}
@RequestMapping (path = "/some-path")
public void getThis() {}
}
Здесь комментарий, который говорит, что this is set due to BaseEntity.setEntityManager
не очень понятно, почемубыло сделано.Почему я нахожу это странным?
Потому что для каждого входящего запроса в JVM будет новый объект этого контроллера.Более того, это сделано для ВСЕХ @RestController
классов.Таким образом, когда-нибудь, с большим количеством запросов, система может выдать OOM.Придерживается ли он даже передового опыта?
Предоставленный объем подразумевает, что разработчик хотел сохранить состояние.Но как это связано с @PersistenceContext
?
Я не смог найти никаких доказательств того, почему это сделано.Таким образом, любые причины, которые могут быть причиной, будут действительно полезны.