Wie zu verwenden qualifier auf "nicht-Standard" - Klasse mit java cdi

Ich versuche, mit @Qualifier zum erstellen einer annotation auf eine Alternative Klasse, die verwendet werden, statt der Standard-Klasse markiert mit @Default. Jedoch , wenn ich dies tun Schweißnaht meldet den Fehler. Ich versuche zu injizieren demo.cdi.ProductB (die Standardeinstellung ist "demo".cdi.ProductA)

Dies ist die Fehlermeldung die ich bekomme:

Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Product with qualifiers @Video
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedMethod] @Inject public demo.cdi.OrderManagementImpl2.OrderManagementImpl2(@Video Product)
  at demo.cdi.OrderManagementImpl2.OrderManagementImpl2(OrderManagementImpl2.java:0)
WELD-001475: The following beans match by type, but none have matching qualifiers:
  - Managed Bean [class demo.cdi.productA] with qualifiers [@Default @Any]

wenn ich ändern beans.xml durch das hinzufügen weiterer alternativen bekomme ich den folgenden Fehler:

<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
    <alternatives>
        <!-- <class>demo.cdi.ProductA</class> -->
        <class>demo.cdi.ProductB</class>
        <class>demo.cdi.ProductC</class>
        <class>demo.cdi.productD</class>
    </alternatives>
</beans>      

(der Fehler):

org.jboss.weld.exceptions.DeploymentException: WELD-001409:
    Ambiguous dependencies for type Product with qualifiers @Default

Wie erstelle ich die Qualifier-Notationen für die nicht-Standard-Klasse?

den rest der code ist unten als Referenz:

(ProductA):

package demo.cdi;
import java.util.LinkedList;
import javax.enterprise.inject.Default;

@Default
public class ProductA implements Product
{
    @Override
    public LinkedList<Feature> getFeatures()
    {
        LinkedList<Feature> rtn = new LinkedList<Feature>();
        rtn.add(new Feature("FKA", "FVA"));
        return rtn;
    }

}

(VideoProduct):

package demo.cdi;
import java.util.LinkedList;
import javax.enterprise.inject.Alternative;
import javax.enterprise.inject.Produces;

@Alternative
@Video
public class VideoProduct implements Product
{
    private VideoProduct() {}

    @Produces
    public Product factoryCreate()
    {
        return new VideoProduct();
    }

    @Override
    public LinkedList<Feature> getFeatures()
    {
        LinkedList<Feature> rtn = new LinkedList<Feature>();
        rtn.add( new Feature("FKB","FVB") );
        return rtn;
    }

}

(Video):

package demo.cdi;    
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;    
import javax.inject.Qualifier;    

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

} 

(OrderManagementImpl2):

package demo.cdi;
import javax.inject.Inject;
import javax.inject.Named;

public class OrderManagementImpl2 implements OrderManagement
{
    private Product product = null;

    @Inject
    public void OrderManagementImpl2(@Video Product _product)
    {
        System.out.println(" [ setProduct ] [ _product = "+_product+"]");
        this.product=_product;
    }

    @Override
    public void createProduct()
    {
        System.out.println(" [ createProduct ] [ product = "+product+"]");
    }
}

(MainApp2):

package demo.cdi;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jboss.weld.Container;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

public class MainApp2
{
    public static void main(String[] args)
    {
        Weld weld = new Weld();
        WeldContainer weldContainer = weld.initialize();
        OrderManagementImpl2 impl = weldContainer.instance().select(OrderManagementImpl2.class).get();
        impl.createProduct();
        weld.shutdown();
    }
} 

InformationsquelleAutor user18896654353 | 2014-01-22

Schreibe einen Kommentar