@PersistenceContext с 'предоставленным' Scope RestController - PullRequest
0 голосов
/ 18 декабря 2018

Сегодня утром я смотрел на кодовую базу в моей компании, и для меня это не было чем-то очень очевидным.Я работал с корпоративными проектами 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?

Я не смог найти никаких доказательств того, почему это сделано.Таким образом, любые причины, которые могут быть причиной, будут действительно полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...