【问题标题】:How to instantiate inject EntityManager programmatically?如何以编程方式实例化注入 EntityManager?
【发布时间】: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);

【问题讨论】:

    标签: spring dao spring-3


    【解决方案1】:
    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);                       
    
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 2013-08-11
      • 2020-12-29
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2015-01-27
      • 2016-05-10
      相关资源
      最近更新 更多