【发布时间】:2014-03-04 02:49:18
【问题描述】:
拥有这个通用的 DAO 定义
@Repository
public class GenericService<T> implements IGenericService<T> {
@PersistenceContext(unitName="mgrUnit", name="mgrEMF")
@Qualifier(value = "mgrEMF")
public void setEm(EntityManager em) {
this.em = em;
util = em.getEntityManagerFactory().getPersistenceUnitUtil();
}
}
并且拥有大量实体,我想自动实例化 DAO、后端 Bean,用于基本表,例如(Region、EmployeSpeciality...)
对于 bean 注册和实例化很简单,但是 DAO 呢? 我必须准确地说,在我的情况下,EntityManager 依赖于服务,我有多个数据库连接。
我读过这篇文章,但老实说它看起来很复杂
http://doanduyhai.wordpress.com/2011/11/20/spring-transactional-explained/
有简单的方法吗?
好的,使用
AutowireCapableBeanFactory beanFactory =
FacesUtils.getWebappContext().getAutowireCapableBeanFactory();
beanFactory.autowireBean(obj);
解决了一半的问题,Bean EMF 被正确注入,但是 bean 没有注册(每次需要我都必须重新实例化),因为 beanFactory 不包含 Bean 定义,所以如何添加是吗?
注意:我知道将对象放在应用程序 MAP 中可以使 DAO 保持可访问性,但这不是一个严肃的解决方案
FacesContext.getCurrentInstance().getExternalContext().
getApplicationMap().put( serviceName, service);
【问题讨论】: