具有此通用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 Definition,所以如何添加它?
NB:我知道将对象放在应用程序MAP中可以保持DAO可访问但不是一个严肃的解决方案
FacesContext.getCurrentInstance().getExternalContext().
getApplicationMap().put( serviceName, service);
答案 0 :(得分:0)
IGenericService service = (IGenericService) ContextManager.findBean( serviceName );
if (service==null && !FacesUtils.getWebappContext().getBeanFactory().
containsBeanDefinition(serviceName)){
service = new ErpGenericService(clazz);
AutowireCapableBeanFactory beanFactory = FacesUtils.getWebappContext().
getAutowireCapableBeanFactory();
beanFactory.autowireBean(service);
//Applying transactional proxies
service = (IGenericService) beanFactory.applyBeanPostProcessorsAfterInitialization(service, serviceName);
FacesUtils.getWebappContext().getBeanFactory().
registerSingleton(serviceName, service);
}