gpt4 book ai didi

java - Tapestry 5 和具有相同接口(interface)的 Spring bean

转载 作者:搜寻专家 更新时间:2023-11-01 03:30:04 25 4
gpt4 key购买 nike

我对 Tapestry 5 和 Spring 集成有疑问。如果我有多个实现相同接口(interface)的 bean,并且我尝试使用 @Inject 注释注入(inject)它们,就会出现问题。当然我有一个异常(exception)。

我找到了一个 tutorial那就是说在那种情况下我也必须使用 @Service 注释但是现在我得到了

org.apache.tapestry5.internal.services.TransformationException
Error obtaining injected value for field
com.foo.pages.Foo.testService: Service
id 'someServiceIDeclaredInSpringContextFile' is not defined by any module...

无论如何,问题是:如何将实现相同接口(interface)的两个不同的 spring bean 注入(inject)到 Tapestry 5 页面中?

最佳答案

我解决了这个问题。

首先我做了一个新的注解

public @interface Bean {
String value();
}

我在任何实现相同接口(interface)的多个 bean 中使用它

@Inject
@Bean("springBeanName")
Service foo;

然后我改变了org.apache.tapestry5.internal.spring.SpringModuleDef

private ContributionDef createContributionToMasterObjectProvider() {
....
public void contribute(ModuleBuilderSource moduleSource,
ServiceResources resources,
OrderedConfiguration configuration) {
....
switch (beanMap.size()) {
case 0:
return null;
case 1:
Object bean = beanMap.values().iterator().next();
return objectType.cast(bean);
default:
Bean annotation = annotationProvider.getAnnotation(Bean.class);
Object springBean = null;
String beanName = null;

if (annotation != null) {
beanName = annotation.value();
springBean = beanMap.get(beanName);
} else {
String message = String.format(
"Spring context contains %d beans assignable to type %s: %s.",
beanMap.size(),
ClassFabUtils.toJavaClassName(objectType),
InternalUtils.joinSorted(beanMap.keySet()));
throw new IllegalArgumentException(message);
}
if (springBean != null) {
return objectType.cast(springBean);
} else {
String message = String.format(
"Bean [%s] of type %s doesn't exists. Available beans: %s",
beanName, ClassFabUtils.toJavaClassName(objectType),
InternalUtils.joinSorted(beanMap.keySet()));
throw new IllegalArgumentException(message);
}
}
}
};

关于java - Tapestry 5 和具有相同接口(interface)的 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2684171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com