我可以实例化一个命名的无状态 bean 吗?



我正在使用JPA将一个大型应用程序迁移到CDI。在更改所有代码之前,我需要知道以下模式是否有效。这将允许我部分迁移应用程序。

我的托管 Bean:

@Named
@Stateless
public class LanguageBoundary implements Serializable {
    @Inject
    LanguageService languageService;
    @Inject
    CrudService crudService;
    public LanguageEntity findById(Long id) {
        return crudService.find(LanguageEntity.class, id);
    }

我可以在任何其他类中使用:

// Methods: DAO - Used by original deprecated parent wrapper class
public LanguageEntity findByIdImpl(Id id) {
    LanguageBoundary lb = new LanguageBoundary();
    return lb.findById(id.getValue());
}

感谢您的建议。

如果你实例化它,bean 就不会由容器管理,所以它可能不是你想要的。相反,您应该注入@Inject

要执行此类操作,您需要获取对该对象的引用。 您可以使用 CDI 执行此操作。 在 CDI 1.1 中,您可以获取 CDI 实用程序类。 在 CDI 1.0 中,您可以使用 JNDI 获取对 Bean 管理器的引用,以执行等效操作。 查看此代码以供参考:https://github.com/apache/deltaspike/blob/master/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java#L98

我很好奇你为什么要使用@Named. 您是否计划直接在 UI 中引用 EJB?

相关内容

  • 没有找到相关文章

最新更新