Java 是否有可能抑制豆类注射?

Java 是否有可能抑制豆类注射?,java,wildfly,weld,Java,Wildfly,Weld,我有一个web应用程序将部署在Wildfly 12上。应用程序中包含一个第三方jar,其代码类似于以下内容 class X { @Inject private Y y = null; public void someMethod() { if (y == null) doSomething(); else doSomethingElse(y); } } 很明显,编写代码的前提是注入

我有一个web应用程序将部署在Wildfly 12上。应用程序中包含一个第三方jar,其代码类似于以下内容

class X
{
    @Inject private Y y = null;

    public void someMethod()
    {
        if (y == null)
            doSomething();
        else
            doSomethingElse(y);
    }
}
很明显,编写代码的前提是注入可能会失败,
y
可能是
null

然而,Weld不喜欢这样,我得到一个部署错误,说
y
有一个不满意的缺陷。我无法修改第三方代码,也不想为
y
提供依赖项。我希望执行
doSomething()
分支

是否可以告诉Weld不要尝试在该注射点注射任何东西


谢谢。

可能有些过分,但是您可以创建一个
生产者
,为该
始终返回
null

@ApplicationScoped
public class YProducer {

    @Produces
    @RequestScoped  
    public Y create() {
        return null;
    }

    public void destroy(@Disposes Y y) {
        //no-op
    }
}

我认为有更优雅的解决方案(在Java8中)利用了新的
可选
类:

@Inject
private Optional<Y> y;
使用javax.enterprise.inject.Instance的其他可能性

@Inject
private Instance<Y> instance;

try {
   y = instance.get();
} catch (Exception e) {
}
@Inject
私事;
试一试{
y=instance.get();
}捕获(例外e){
}

您可以让它抛出空指针异常,从外部捕获它,然后从那里启动“doSomething”?-也许这是一个愚蠢的猜测。@AsierAranbarri没有NPE。当Weld“验证”注入点时,错误发生在展开时。它确定它不能满足依赖关系并停止部署。这是一个愚蠢的猜测:(谢谢。我必须做一些更改才能使其正常工作。我用ManagedBean替换了应用程序(奇怪,因为Weld文档说明ManagedBean是可选的)我必须删除RequestScope。这意味着Y的所有注入都将为null,而不仅仅是我上面提到的,对吗?我想我可以接受,但我需要调查。没错,
制作人将负责此类的所有
@注入。我不确定你是否能在这个产品中做些聪明的事情cer逻辑,以了解是返回
null
还是根据上下文构造Y实例。问题是我无法修改第三方代码。
@Inject
private Instance<Y> instance;

try {
   y = instance.get();
} catch (Exception e) {
}