当前位置: 首页 > 知识库问答 >
问题:

CDI从外部注入bean

金健
2023-03-14

基本上,我的项目是一场战争(MyProject),导入2罐,MyProject-Client和MyProjectJar-API

我的项目

pom.xml
<dependency>
   <groupId>com.sample</groupId>
   <artifactId>MyProject-Client</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
   <groupId>com.sample</groupId>
   <artifactId>MyProjectJar-API</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>

@Named
@Stateless
public class ParametroServiceImpl implements ParametroService, Serializable {
}

MyProjectJar-API - 有一个接口

public interface ParametroService {}

MyProject-Client -想要注入在MyProject上生成的ParametroService

@Named
@RequestScoped
public class RestEngine implements Serializable{
   @Inject
   private ParametroService parametroService;
}

我想知道是否可以将ParameterService(在MyProject上生成)注入MyProject客户端(这是在MyProject中导入的jar)?

更新

如果我以这种方式注入,它将不起作用

@Inject
private ParametroService parametroService;

但是如果我做一个程序查找,它有效,但我不知道为什么

BeanManager beanManager=(BeanManager)new InitialContext().lookup("java:comp/BeanManager");
Bean<?> bean = beanManager.getBeans(ParametroService.class).iterator().next();
parametroService = (ParametroService)beanManager.getReference(bean, ParametroService.class, beanManager.createCreationalContext(bean));

共有1个答案

宋瀚海
2023-03-14

有两种可能的解决方案:使用< code>bean archives或< code>@Producer方法。

要将您的MyProjectJar-API转换为bean存档,您只需添加一个META-INF目录,其中包含beans.xml。如果您控制正在使用的jar,这是更可取的解决方案。

如果您无法修改jar,您仍然可以创建@Producer方法,该方法创建对象的实例。CDI将使用此方法来创建实例。

public class ParametroServiceProducer {
  @Produces
  public ParametroService createInstance() {
    return new ParametroServiceImpl();
  }
}
 类似资料:
  • 在Spring中,我们有基于注释和基于XML的配置。虽然第一种配置被推荐用于快速开发,但第二种配置更加灵活,能够处理特殊情况。我们目前有两种配置:为JUnit测试注入模拟和从外部库配置bean。 我还没有为CDI的XML配置找到任何等价物,所以我的问题是,如何处理这种bean的依赖注入?它们来自外部库,需要进行配置,不可能向它们添加任何注释。

  • 我有一个JAR文件,其中包含一个请求范围Bean。(一个注释为的类)。 我有另一个Web服务项目(作为WAR文件构建)。上述JAR文件位于WAR文件的文件夹中。 我试图的类到Web服务项目中的一个类中。 我正在得到一个 这两个项目都有JAR文件,WAR文件包含一个空的。我已经研究这个问题好几天了。请帮忙。 谢谢

  • 问题内容: 当前,我正在使用PersistenceContext注入EntityManager。EM被完美注入。 现在,我尝试装饰Bean,然后突然没有注入em。我得到一个NullPointerException。 我知道EJB和CDI是2个完全不同的管理器,所以一个都不知道另一个。我期望@PersistenceContext是EJB注入点,而@Inject是CDI。我应该怎么做才能解决这个问题并

  • 当前有包含内部映射器的映射器(有时,它们本身包含其他内部映射器)。

  • 问题内容: 由于JPA 2.0不支持注入EntityListener(将使用JPA 2.1),因此决定使用JNDI查找来获取,并通过它来获取登录用户。我定义了一个与此类似的东西: 在会话范围内以以下方式管理用户: 我想知道这种方法有什么缺点或要注意的地方。性能吞吐量?当有多个登录用户在其自己的范围内同时更新实体时,会发生什么情况? Hibernate JPA 2.0 缝焊CDI Glassfish

  • 我一直在思考编译时评估注释值的Java特性,它似乎真的很难外部化注释值。 但是,我不确定这是否真的是不可能的,所以我非常感谢对此的任何建议或明确的答案。 更重要的是,我试图将控制Spring中预定方法调用之间延迟的注释值外部化,例如: 假设位于类路径上,并且包含属性键及其相应的长整型值。 现在,这段代码有明显的编译错误,因为我们试图将值赋给变量,但这是强制性的,因为我们不能将变量赋给注释值,除非它