基本上,我的项目是一个战争(MyProject)并导入2个罐子,MyProject-Client和MyProjectJar-API
MyProject
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;
}
我想知道是否可以在MyProject-Client中注入ParametroService(在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));
答案 0 :(得分:1)
有两种可能的解决方案:使用bean archives
或@Producer
方法。
要将MyProjectJar-API
转换为bean存档,只需添加一个META-INF
目录,其中包含beans.xml
。如果您控制正在使用的jar,这是首选的解决方案。
如果您无法修改jar,您仍然可以创建一个@Producer
方法,该方法可以创建对象的实例。 CDI将使用此方法来创建实例。
public class ParametroServiceProducer {
@Produces
public ParametroService createInstance() {
return new ParametroServiceImpl();
}
}