Как работает @Produces в контексте JavaEE? - PullRequest
2 голосов
/ 08 августа 2011

Из руководства по CDI я обнаружил различные примеры и хочу использовать их для внедрения некоторых объектов в EJB (а именно, я хочу вставить Neo4J-разъем GraphDatabaseService).Итак, у меня есть целевой EJB:

@Stateless
public class Neo4JEJB implements Neo4JEJBInterface{

private @Inject @Named("the bidule") String bidule = "no bidule injected";
}

и класс продюсера, содержащий метод продюсера

public class Producer {
public @Produces @Named("the bidule") String createBidulateur() {
    return "the bidule that should always work";
}
}

Но до сих пор я не смог увидеть свой biduleполе, имеющее правильное значение.

Что-то я делаю не так?

1 Ответ

4 голосов
/ 08 августа 2011

Во-первых, вы используете @Named, как старый шов @Name.Эти две аннотации имеют две разные цели.В CDI @Named используется только для предоставления имени, которое можно использовать для ссылки на компонент из фаслета.При инъекции бин идентифицируется как тип и, необязательно, с помощью квалификатора.Поскольку вы вводите String, скорее всего, необходим квалификатор.Вы можете создать аннотацию квалификатора, как описано здесь , и добавить к ней свой производитель и точку внедрения:

Если вы создали классификатор @Bidule

@Stateless
public class Neo4JEJB implements Neo4JEJBInterface{

    private @Inject @Bidule String bidule = "no bidule injected";
}

public class Producer {
    public @Produces @Bidule String createBidulateur() {
        return "the bidule that should always work";
    }
}

Также,Я думаю (но не уверен), что bean-компонент, содержащий метод продюсера, должен быть ограничен ( см. Здесь ).

...