当尝试将参数注入(inject) CDI bean (ApplicationScoped) 的构造函数时,我遇到了以下问题:
Caused by: org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001435: Normal scoped bean class xx.Config is not proxyable because it has no no-args constructor - Managed Bean [class xx.Config] with qualifiers [@Default @Named @Any].
at org.jboss.weld.bean.proxy.DefaultProxyInstantiator.validateNoargConstructor(DefaultProxyInstantiator.java:50)
at org.jboss.weld.util.Proxies.getUnproxyableClassException(Proxies.java:217)
at org.jboss.weld.util.Proxies.getUnproxyableTypeException(Proxies.java:178)
但是,我在类上确实有一个可注入(inject)的构造函数:
@Inject
public Config(ConfigLocator configLocator) {
defaultConfigPath = configLocator.getPath();
doStuff();
}
使用默认构造函数、变量注入(inject)和后构造方法,这一切都可以正常工作,但在这种情况下我更喜欢构造函数注入(inject)。
想知道这里出了什么问题吗?
最佳答案
我们解决了将类拆分为接口(interface)和实现的类似问题。 在你的情况下是这样的:
public interface Config
{
// API here
}
@ApplicationScoped @Priority(0)
public class ConfigImpl implements Config
{
@Inject
public ConfigImpl(ConfigLocator configLocator) { ... }
// API implementation here
}
关于java - CDI 对象不能用注入(inject)的构造函数代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543657/