Ich habe diesen Endpunkt auf meiner JAX-RS Java EE-Anwendung:CDI als Fabrik?
public class SearchEndpoint implements ISearchEndpoint
{
@Inject protected SearchService searchService;
@Override
public Response search()
{
return Response.ok().entity(this.searchService.search()).build();
}
}
In searchService's search
Methode:
public class SearchService {
@Inject private QueryVisitor visitor;
public List<?> search() {
for (Expression<?> group : groups)
group.accept(this.visitor);
}
}
Und dann in QueryVisitor
,
@Override
public ESEntityPathPointer<?> visit(Expression<?> expr, ESEntityPathPointer<?> context) {
switch ((EntityType)expr.getMetadata().getElement())
{
case digitalInput:
if (context == null)
context = new DigitalInputESEntityPathPointer();
break;
case followUpActivity:
if (context == null)
context = new FollowUpActivityESEntityPathPointer();
break;
case ...;
}
return context;
}
So spritzt CDI ein SearchService
auf meiner JAX-RS-Endpunkt-Implementierung, dann injiziert CDI eine QueryVisitor
in zuvor injizierten SearchService
.
Also, wie Sie in der Lage sind zu erraten, ist QueryVisitor.visit
als eine Fabrik. Gemäß einem Enumerationswert wird ein ESEntityPathPointer<?>
Objekt oder ein anderes Objekt erstellt.
Ich möchte diese Objekte mit CDI erstellt werden. Ich habe ein bisschen darüber gelesen, aber ich bin nicht ganz in der Lage herauszufinden, wie das geht.
Irgendwelche Ideen?
Es teilt mir mit: WELD-001308: Kann keine Beans für Typ auflösen: class DigitalInputESentityPathPointer; Qualifier: [] – Jordi
@Jordi Sie könnten einige Einblicke aus dieser [Frage] (http://stackoverflow.com/q/31812173/1426227) bekommen. Übrigens, haben Sie Qualifier in Ihrer 'DigitalInputENentityPathPointer' Klasse? –
Ja. Ich habe sie entfernt und jetzt funktioniert es. Könnten Sie mir eine kurze Einweisung bringen? – Jordi