我如何@Inject CDI @ApplicationScoped bean到@RequestScoped JAX-RS bean?

时间:2013-11-22 17:31:42

标签: java jax-rs cdi resteasy

我已将@ApplicationScoped CDI注释添加到一个简单的bean:

@ApplicationScoped
public class History {

然后尝试将此@Inject转换为JAX-RS(resteasy)bean:

@RequestScoped
@Path("/history")
public class HistoryAPI {

@Inject
private History history;

但历史仍然无效。我在WEB-INF中有一个beans.xml文件。我已经尝试了很多关于这个主题的变化,但是虽然app服务器(Wildfly)承认它是从CDI开始我无法让注入工作。我缺少什么想法?谢谢。

ETA:我尝试​​了一个空的beans.xml和几个变种,最新的是:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
                           http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
</beans>

2 个答案:

答案 0 :(得分:0)

尝试从HistoryAPI中删除@RequestScoped。

wildfly-quickstart projects中有一个很好的JAX-RS示例

我在WF8 beta1上试过它,一切都很好地注入了。

答案 1 :(得分:0)

奇怪......我认为你的代码应该有效......

我在GitHub上创建了这个问题的一个例子(使用Wildly 8.2.0.Final和Glassfish 4.1测试):https://github.com/StefanHeimberg/stackoverflow-20150993

我没有使用web.xml而没有beans.xml

测试:

浏览器中F5的3倍到网址http://localhost:8080/mavenproject1-1.0-SNAPSHOT/webresources/history

<强>输出:

20:32:12,955 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-2) HistoryAPI.init() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-2) HistoryAPI.doSomething() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.History] (default task-2)  ===> History.init() called
20:32:12,956 SEVERE [com.mycompany.mavenproject1.History] (default task-2)  ===> History.doSomething() called 
20:36:09,830 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-3) HistoryAPI.init() called
20:36:09,831 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-3) HistoryAPI.doSomething() called
20:36:09,831 SEVERE [com.mycompany.mavenproject1.History] (default task-3)  ===> History.doSomething() called 
20:36:10,549 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-4) HistoryAPI.init() called
20:36:10,549 SEVERE [com.mycompany.mavenproject1.HistoryAPI] (default task-4) HistoryAPI.doSomething() called
20:36:10,549 SEVERE [com.mycompany.mavenproject1.History] (default task-4)  ===> History.doSomething() called 
相关问题