在我们的 JEE 应用程序中,我们创建了一个新注释@MyAnnotation,并将其设置在 CDI beans ( @ApplicationScoped ) 上。
然后我们有一个拦截器,它拦截所有带有@MyAnnotation注释的 bean 。
问题是它不适用于由@Produces方法创建的 bean。
这意味着拦截器没有被调用。
所以如果我们有这个类:
@ApplicationScoped
public class OtherClass
{
@Inject
private MyBean myBean;
public void f()
{
myBean.g();
}
}
Run Code Online (Sandbox Code Playgroud)
然后以下将起作用:
@ApplicationScoped
@MyAnnotation
public class MyBean
{
public void g() {}
}
Run Code Online (Sandbox Code Playgroud)
但下面的不会:
@ApplicationScoped
public class MyBeanProducer
{
@Produces
public MyBean create()
{
return new MyBean();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让拦截器拦截使用 @Produces 创建的 CDI bean?
我想将以下代码添加到我的班级中:
static private final ILogic_P logicInstanceI =
(ILogic_P)Factory.CreateAnon("some.path.ILogic_P" + (SomeClass.isIMDB() ? "1" : "2"));
public static ILogic_P getLogicInstanceI(){
return logicInstanceI;
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚静态变量的初始化是否是线程安全的。两个线程是否有可能同时尝试初始化此属性?