【问题标题】:Using @Produces with @Qualifier将@Produces 与@Qualifier 一起使用
【发布时间】:2014-01-23 15:28:36
【问题描述】:

如果使用@Qualifier,有没有办法强制使用生产者方法?我有一个@Produces 工厂方法,但仍在调用构造函数,这是一个问题,因为我需要InjectionPoint 来读取参数。使用下面的代码RRRRRRRR 总是会被打印出来。

@ProductTypeA
public class ProductA implements Product
{
    public String test="testA";

    private ProductA()
    {
        System.out.println("RRRRRRRRRRRRRRRRRRRR");
        this.test = "testB";
    }
    private ProductA(InjectionPoint injectionpoint)
    {
        System.out.println("TTTTTTTTTTTTTTTT");
        this.test="testC";
    }
    @Produces
    public ProductA getProductA(InjectionPoint injectionpoint)
    {
        this.test="testD";
        System.out.println("-----------------------------");
        System.out.println("injectionpoint.getAnnotated() = "+injectionpoint.getAnnotated());
        return new ProductA(injectionpoint);
    }

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

    @Override
    public String toString()
    {
        return "ProductA []";
    }

}

预选赛:

@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface ProductTypeA
{
    @Nonbinding
    String testfield() default "23";
}

【问题讨论】:

    标签: java jakarta-ee cdi jboss-weld


    【解决方案1】:

    限定符应该在生产者方法中:

    @Produces
    @ProductTypeA
    public ProductA getProductA(InjectionPoint injectionpoint)
    {
        this.test="testD";
        System.out.println("-----------------------------");
        System.out.println("injectionpoint.getAnnotated() = "+injectionpoint.getAnnotated());
        return new ProductA(injectionpoint);
    }
    

    【讨论】:

    • 谢谢,将它从课堂移到@Produces 效果很好。所有的教程似乎都跳过了使 CDI 工作所需的一些关键点
    • 你有这样的教程的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2018-01-16
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多