CDI使用@Produces按字段名称注入EntityManagers

时间:2014-12-12 21:13:49

标签: java ejb cdi entitymanager

我正在实现部署到Wildfly 8.2.0的Java EE应用程序。有多个EntityManagers,我想通过字段名称注入。为此,我使用@Produces创建了一个生产者方法,该方法从InjectionPoint获取字段名称。

public class Resources {

    @PersistenceContext(unitName = "primary")
    private EntityManager primaryEm;

    @PersistenceContext(unitName = "secondary")
    private EntityManager secondaryEm;

    @Produces
    public EntityManager getEntityManager(InjectionPoint injectionPoint)
        throws Exception {
        Field field = getClass().getDeclaredField(
               injectionPoint.getMember().getName());

        return (EntityManager) field.get(this);
    }
}

然后我可以简单地使用正确的字段名称注入EntityManager:

@Inject
private EntityManager primaryEm;

此解决方案到目前为止有效,但CDI中是否有另一种更优雅的方式来实现“按字段名称注入”功能?

1 个答案:

答案 0 :(得分:1)

我认为您的解决方案尽可能最漂亮。或者你可以详细描述它对你的优雅意味着什么?