历史 | 登录     查看当前页的打印版本.  
问题详情 (XML | Word | Printable)

Key: EASYJWEB-22
类型: 问题 问题
状态: Resolved Resolved
解决: Fixed
优先级: Major Major
开发者: daxia
报告人: easyjweb
投票: 0
关注人: 0
操作

复制 问题
创建 子任务
如果你是 登录 你不能看到更多操作.
easyjweb

IOC容器中getBeans的Bug

创建: 08/十二月/07 11:35 上午   更新: 08/十二月/07 11:02 下午
模块: IOC容器
影响版本:
修复版本:

环境: easyjweb1.0m2 +jdk1.5


 描述  « Hide
在容器中配置了多个页面处理器以后,出现了问题。提示信息如下:

    容器中有多个同类型的Bean,无法确定返回哪一个!

配置信息如下:
<beans>
<bean name="CommonTemplatePage1" class="com.easyjf.web.core.support.CommonTemplatePageVender">
<property name="order" value="1"/>
</bean>
<bean name="CommonTemplatePage2" class="com.easyjf.web.core.support.CommonTemplatePageVender">
<property name="order" value="4"/>
</bean>
<bean name="CommonTemplatePage3" class="com.easyjf.web.core.support.CommonTemplatePageVender">
<property name="order" value="2"/>
</bean>
<bean name="CommonTemplatePage4" class="com.easyjf.web.core.support.CommonTemplatePageVender">
<property name="order" value="3"/>
</bean>
</beans>

 所有   备注   改动记录      排列顺序:
daxia - 08/十二月/07 11:02 下午
已经修正的这个问题。这是以前的一个错误!
修改后的源码如下所示:
public List getBeans(Class type) {
List l = new ArrayList();
List beans = super.getBeansByType(type);
if (beans != null) {
l.addAll(beans);
}
for (Container innerContainer : containers.values()) {
List innerBeans = innerContainer.getBeans(type);
if (innerBeans != null)
l.addAll(innerBeans);
}
if (Order.class.isAssignableFrom(type)) {
Collections.sort(l, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Order) o1).getOrder().intValue()
- ((Order) o2).getOrder().intValue();
}
});
}
return l;
}