Вы, кажется, используете spring, поэтому ваше решение будет довольно простым:
@Component
@Scope("prototype")
public class MyPersistenceContainer
{
@PersistenceContext
private EntityManager em;
public EntityManager getEntityManager()
{
return em;
}
}
И теперь вы можете просто внедрить экземпляр этого класса в своем конструкторе, он всегда будет содержать действительный EntityManager (потому чтобобовой области).Имейте в виду: в веб-среде вы, вероятно, должны использовать @SessionScope
или даже @RequestScope
вместо прототипа, это сэкономит ресурсы
Но есть что рассмотреть:
При использовании bean-компонентов с одинарной областью действия, которые имеют зависимости от bean-объектов, которые определены как прототипы, имейте в виду, что зависимости разрешаются во время создания экземпляра.Это означает, что если вы зависимостью внедрите bean-объект с прототипом в bean-объект синглтона, то будет создан экземпляр нового bean-компонента-прототипа, а затем зависимость будет введена в bean-объект singleton ... но это все.Точно такой же экземпляр прототипа будет единственным экземпляром, который когда-либо поступал в бин с одной областью действия, что хорошо, если вы этого хотите.
Однако иногда то, что вы на самом деле хотите, предназначено для единственной области действия.bean, чтобы иметь возможность снова и снова приобретать новый экземпляр bean-объекта с прототипом во время выполнения.В этом случае бесполезно использовать просто зависимость, внедряющую bean-объект с прототипом в ваш синглтон-компонент, потому что, как объяснялось выше, это происходит только один раз, когда контейнер Spring создает экземпляр синглтон-компонента и разрешает и внедряет его зависимости.Если вы находитесь в сценарии, в котором вам нужно снова и снова получать новый экземпляр (прототипа) bean-компонента во время выполнения, обратитесь к разделу, озаглавленному Раздел 4.3.7, «Внедрение метода»
Итак, если вы хотите внедрить ваш «контейнер-компонент управления объектами» в одноэлементные компоненты (это область по умолчанию) , взгляните на https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-method-injection
Очень важно правильно настроить области видимости, иначе у вас могут быть (и будут) несоответствия базы данных, взаимные блокировки или что-то еще хуже