2009-12-11 15 views
4

藉助於Spring,我可以自動裝配具有以下屬性的bean:在Spring中,如何使用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); 

回答

5

嘗試調用

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

其中 「myEntityManagerFactorBean」 是你LocalContainerEntityManagerFactoryBean

但是,爲什麼你需要的?

+0

這是一種罕見的情況,我需要根據傳入的值獲取不同的EntityManager。它只是一個單元測試,它通過實體管理器列表並確保它們全部正確設置。 – HappyEngineer 2009-12-12 00:36:19

+0

啊,單元測試 - 確定:) – Bozho 2009-12-12 06:59:46

1

我使用基於SpringJUnit4ClassRunner

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

被測化酶經由模擬上下文注入。有了這個註釋,它將通過注入獲得實體管理器。

​​
相關問題