拦截使用@Produces 方法创建的 CDI bean

Intercepting CDI beans created with @Produces method

在我们的 JEE 应用程序中,我们创建了一个新注释 @MyAnnotation,我们在 CDI bean (@ApplicationScoped) 上设置它。
然后我们有一个拦截器拦截所有带有@MyAnnotation注解的bean。
问题是它不适用于由 @Produces 方法创建的 bean。
这意味着拦截器没有被调用。

所以如果我们有这个 class:

@ApplicationScoped
public class OtherClass
{
     @Inject
     private MyBean myBean;

     public void f()
     {
        myBean.g();
     }
}

那么以下将起作用:

@ApplicationScoped
@MyAnnotation
public class MyBean
{
   public void g() {}
}

但以下不会:

@ApplicationScoped
public class MyBeanProducer 
{

    @Produces
    public MyBean create() 
    {
        return new MyBean();
    }
}

有没有办法让拦截器拦截使用@Produces 创建的 CDI bean?

解决方案是使用InterceptionFactory(来自CDI 2.0)来代理@Poduces方法产生的bean,意思是:

@ApplicationScoped
public class MyBeanProducer 
{

    @Produces
    public MyBean create(InterceptionFactory<MyBean> interceptionFactory) 
    {
        return interceptionFactory.createInterceptedInstance(new MyBean());
    }
}

@MyAnnotation 应该在 MyBean.
MyBean 必须具有可代理的无参数构造函数,因为 interceptionFactory.createInterceptedInstance() 正是这样做的 - 代理 MyBean 实例.
我找到了解决方案 here