java – Tapestry 5和具有相同接口的Spring bean
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Tapestry 5和具有相同接口的Spring bean,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1840字,纯文字阅读大概需要3分钟。
内容图文
我在Tapestry 5和Spring集成方面遇到了问题.如果我有一个实现相同接口的多个bean并尝试使用@Inject注释注入它们,则会出现问题.当然我得到了一个例外.
我找到了一个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...
无论如何,问题是:如何将两个不同的Spring bean(实现相同的接口)注入Tapestry 5页面?
解决方法:
我解决了这个问题.
首先我做了一个新的注释
public @interface Bean {
String value();
}
我使用这个,无论我有多个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和具有相同接口的Spring bean全部内容,希望文章能够帮你解决java – Tapestry 5和具有相同接口的Spring bean所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。