我正在尝试编写一个 cdi 扩展来注册一个自定义 bean,该 bean 本身已注入托管 bean。 将应用程序部署到 payara 服务器时,我收到错误消息:
Exception during lifecycle processing
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408: Unsatisfied dependencies for type ClassicTestBean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private cditest.DynamicTestBean.bean
at cditest.DynamicTestBean.bean(DynamicTestBean.java:0)
-- WELD-001408: Unsatisfied dependencies for type ClassicTestBean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private cditest.DynamicTestBean.bean
at cditest.DynamicTestBean.bean(DynamicTestBean.java:0)
我的代码如下:
public class TestExtension implements Extension {
public void lookupBeans(@Observes AfterBeanDiscovery event, BeanManager bm) {
event.addBean()
.read(bm.createAnnotatedType(DynamicTestBean.class))
.beanClass(DynamicTestBean.class)
.scope(ApplicationScoped.class);
}
}
public class DynamicTestBean {
@Inject
private ClassicTestBean bean;
public void doSomething() {
bean.doSomething();
}
}
@Dependent
public class ClassicTestBean {
public void doSomething() {
System.out.println("test bean do");
}
}
@Singleton
@Startup
public class TestStartup {
@Inject
private DynamicTestBean target;
@PostConstruct
public void init() {
target.doSomething();
}
}
文件 beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
version="2.0" bean-discovery-mode="annotated">
</beans>
CDI 容器无法解析类 DynamicTestBean 中 ClassicTestBean 注入的依赖关系。
我尝试解决问题但没有成功:
这里有人可以帮助我吗?先谢谢大家了!