Весной, как я могу использовать ClassPathXmlApplicationContext для получения экземпляра EntityManager?


С помощью пружины я могу автоматически подключить боб со следующим свойством:

@PersistenceContext(unitName="foo") private EntityManager em;

Используя следующее, Я могу вручную автоматически подключить Боб "someBean":

ClassPathXmlApplicationContext ctx = 
      new ClassPathXmlApplicationContext("META-INF/applicationContext.xml");
AutowireCapableBeanFactory fac = ctx.getAutowireCapableBeanFactory();
fac.autowireBean(someBean);

Однако я не могу понять, как непосредственно получить конкретный EntityManager. Пример использования заключается в том, что я хочу написать тест, который получит все объекты EntityManager и выполнит простые запросы в них, чтобы убедиться, что они настроены правильно. Для этого мне нужно иметь возможность получить все объекты EntityManager из приложения контекст. Как я могу это сделать?

Следующее не работает. Он возвращает пустую карту.

Map<String,EntityManager> ems = ctx.getBeansOfType(EntityManager.class);
2 4

2 ответа:

Попробуйте позвонить

EntitiyManagerFactory factory = 
          (EntityManagerFactory) ctx.getBean("myEntityManagerFactoryBean")
EntityManager em = factory.createEntityManager();

Где "myEntityManagerFactorBean" - ваш LocalContainerEntityManagerFactoryBean

, но зачем вам это нужно?

Я использую SpringJUnit4ClassRunner

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:jndiContext-mock.xml", 
                                    "classpath:spring/testContext.xml" })

Тестируемый клаз вводится через фиктивный контекст. С этим аннотированным он получит entity manager через инъекцию.

@PersistenceContext
protected HibernateEntityManager entityManager;