【问题标题】:Why Can't CDI Find My Producer?为什么 CDI 找不到我的制作人?
【发布时间】:2016-06-09 04:50:28
【问题描述】:

由于某种原因,CDI 似乎无法将字符串注入 WebSocket ServerEndpoint。我收到错误Unsatisfied dependencies for type String with qualifiers @HelloMessage。我在下面包含了 Producer 和 ServerEndpoint 实现。有任何想法吗?如果我创建一个自定义类(比如 Messenger)并生成它而不是 String,注入似乎可以工作。

限定符实施

import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public
@interface HelloMessage
{
}

生产者实施

import java.io.Serializable;

import javax.inject.Named;
import javax.ws.rs.Produces;

public
class StringProducer
implements Serializable
{
    @Produces
    @HelloMessage
    public
    String getMessage()
    {
        return "Hello, from Message!";
    }
}

ServerEndpoint 实施

import javax.inject.Inject;
import javax.inject.Named;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value = "/test")
public
class TestEndpoint
{
    @OnMessage
    public
    void onMessage(Session session, String unused)
    {
        System.out.println(this.message);
    }

    @Inject @HelloMessage
    private String message;
}

【问题讨论】:

    标签: cdi inject


    【解决方案1】:

    在定义生产者时,我需要导入javax.enterprise.inject.Produces 而不是javax.ws.rs.Produces

    生产者实施

    import java.io.Serializable;
    
    import javax.inject.Named;
    import javax.enterprise.inject.Produces;
    
    public
    class StringProducer
    implements Serializable
    {
        @Produces
        @HelloMessage
        public
        String getMessage()
        {
            return "Hello, from Message!";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多