首先,我不是这个学科的专家,这就是为什么我要问...
我有两个Maven模块,都公开了几个接口。一个模块处理业务逻辑(BL),另一个模块是通往外部系统(GW)的网关。 只要网关用作传出网关,循环依赖关系就不会有问题,就像这样:
BL = depends => GW
网关的接口通过@Inject注入到业务逻辑中,一切正常。
模块:BusinessLogic:
public class BusinessLogicBean {
@Inject private GatewayInterface interface;
public void sendStuff(Param myParam) {
interface.doSend(myParam);
}
模块:网关
public Interface GatewayInterface {
void doSend(Param someParam);
public class GatewayInterfaceBean {
public void doSend(Param someParam) {
//implementation goes here
一旦我收到需要将其委派给业务逻辑的传入调用,就无法指定:
BL =依赖=> GW =依赖=> BL
因为Maven会抱怨密码依赖。
因此,我决定为网关设置一个专用的接口模块,因此相关性如下:
BL =依赖=> I_GW <=依赖= GW =依赖=> BL
到目前为止,尽管如此,@ Inject现在抱怨存在无法解决的依赖关系,与上面相同的代码不再起作用。
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type OrderProcess with qualifiers @Default
在注入点[BackedAnnotatedField] @Inject私有de.xyz.abc.externalaccess.control.AccessServiceBean.process 在de.xyz.abc.externalaccess.control.AccessServiceBean.process(AccessServiceBean.java:0)
这是模块的外观: 模块:BusinessLogic:
public class BusinessLogicBean {
@Inject private GatewayInterface interface;
模块:Interfaces_Gateway
public Interface GatewayInterface {
void doSend(Param someParam);
模块:网关
public class GatewayInterfaceBean {
public void doSend(Param someParam) {
//implementation goes here
public class ProvisioningServiceTest {
private static SeContainer container;
private static ProvisioningService service;
@Test
public void testPostApplications() {
service.postApplications(null);
}
@BeforeClass
public static void setUp() {
SeContainerInitializer weld = Weld.newInstance();
container = weld.initialize();
service = container.select(ProvisioningService.class).get();
}
@AfterClass
public static void shutDown() {
container.close();
}
}
爆炸发生在
beans.xml(在META-INF的所有三个模块中:
<?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_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<interceptors>
<class>de.abc.util.interceptor.CallTracingInterceptor</class>
<class>de.abc.util.interceptor.PerformanceTracingInterceptor</class>
<class>de.abc.util.interceptor.ValidationInterceptor</class>
</interceptors>
</beans>
WELD 3.1.1
顺便说一句,将这种方法与WildFly和@EJB注释一起使用完全不会引起问题,但是不幸的是,Wildfly在这里是没有选择的。
感谢任何提示。
答案 0 :(得分:0)
如果可能,依赖关系链中的一个bean应该是@ApplicationScoped或@SessionScoped。引用将是代理,可以在运行时尽快解决。