首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Inject和@EJB有什么区别?

@Inject和@EJB有什么区别?
EN

Stack Overflow用户
提问于 2011-05-04 20:57:09
回答 3查看 28.7K关注 0票数 40

我目前正在学习新的Java 6组件模型,并且对最新的依赖注入机制感到困惑。以下是我的问题:

1) @Inject和@EJB有什么区别?

2)如果我有一个简单的POJO,其中包含另一个POJO(其中哪一个是DAO代码),那么更好的选择是:@Inject还是@EJB?

我可以混合@Inject和@EJB吗?

一个例子是:

ClassA_Adaptor

  • ClassA_Adaptor

  • ClassA实现InterfaceA并有一个InterfaceAB实例,并有ClassB

  • ClassB实现InterfaceB的实例和一个ClassB_Adaptor的实例,以及一个DAO_ClassB

  • ClassB_Adaptor实现InterfaceB的实例,并且有一个ClassC

ClassB的实例,以及一个#EN2#将使用JPA2.0的实例。

我想注入它们,包括DAO和WebService。

3)只对某些操作使用事务性操作,而不是对所有操作使用事务性操作,这是否是一种糟糕的方法?

例如: DAO_ClassB中的一些方法是典型的查询,而其他方法是“写”方法。不用事务包装"READ“方法不好吗?

据我理解,DAO_ClassB可以使用@ DAO_ClassB (注入DAO_ClassB并使所有方法都是事务性的)与事务一起包装。我怎么能控制它?

抱歉,如果有些问题令人困惑,因为我只知道Java 6新组件模型的一些部分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-09 03:58:57

  1. @EJB只注入EJB,但@Inject可以用于注入POJO而不是EJB。但是,@Inject要求您的归档文件是BDA (包含用于EE 6的beans.xml,或者在EE 7中隐式包含)。@Inject还具有额外的特定于CDI的功能(范围、拦截器等),但是这些功能会产生额外的开销。应用服务器支持指定@EJB绑定,以便部署人员可以选择目标EJB,但@Inject只允许应用程序开发人员选择目标EJB (它必须存在于application).
  2. If中--目标不是EJB,那么就不能使用@EJB.
  3. --这取决于您是否正在进行多个与内部相关的查询,然后尝试做出业务决策。您需要了解隔离级别,并将其考虑在内,即使是只读操作。
票数 31
EN

Stack Overflow用户

发布于 2014-05-06 11:11:30

来自Adam Biens Weblog:

您可以使用这两个注释注入EJB。从@Inject开始,如果遇到任何问题,请切换到@EJB。

代码语言:javascript
复制
@Inject does not have any methods / attributes--it is just a plain annotation:


@Target(value = {ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface Inject {
}

另一方面,@EJB注释允许您传递其他信息,这些信息对于引用远程EJB或不能以“约定而非配置”样式简单注入的EJB非常有用:

代码语言:javascript
复制
@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface EJB {

    public String name() default "";

    public String beanName() default "";

    public Class beanInterface() default Object.class;

    public String mappedName() default "";
}
票数 13
EN

Stack Overflow用户

发布于 2011-05-09 05:22:42

  1. @Inject比
  2. 更通用,是CDI规范的一部分。因此,如果您想使用@Inject,您需要在您的服务器中实现它。
  3. For POJO(而不是EJB)您必须使用@Inject.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5889767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档