Spring @ControllerAdvice组件不考虑有序接口
从SpringJavadoc开始:Spring @ControllerAdvice组件不考虑有序接口,spring,spring-mvc,Spring,Spring Mvc,从SpringJavadoc开始:@ControllerAdvice注释类应支持@Order接口和@Order注释。但这不适用于我的异常处理程序: @ControllerAdvice(annotations=Controller.class) 公共类MyExceptionHandler实现有序{…} 在查看源代码和调试过程中,我发现在我的例子中没有考虑到有序: private-controlleraviceean(对象bean,@Nullable-BeanFactory-BeanFactory
@ControllerAdvice
注释类应支持@Order
接口和@Order
注释。但这不适用于我的异常处理程序:
@ControllerAdvice(annotations=Controller.class)
公共类MyExceptionHandler实现有序{…}
在查看源代码和调试过程中,我发现在我的例子中没有考虑到有序
:
private-controlleraviceean(对象bean,@Nullable-BeanFactory-BeanFactory){
this.bean=bean;
this.beanFactory=beanFactory;
类beanType;
if(字符串的bean实例){
字符串bean名称=(字符串)bean;
Assert.hasText(beanName,“Bean名称不能为null”);
Assert.notNull(beanFactory,“beanFactory不得为null”);
如果(!beanFactory.containsBean(beanName)){
抛出新的IllegalArgumentException(“BeanFactory[”+BeanFactory+
“]不包含指定的控制器建议bean”“+beanName+“””);
}
beanType=this.beanFactory.getType(beanName);
//只执行此代码!!!
//这只使用@Order注释
this.order=initOrderFromBeanType(beanType);
}
否则{
//死代码???Spring只将字符串参数传递给此构造函数
notNull(bean,“bean不能为null”);
beanType=bean.getClass();
//这将使用Ordered和@Order注释
this.order=initOrderFromBean(bean);
}
...
}
另请参见controlleradviceean.findAnnotatedBeans()
如何找到带注释的bean:
公共静态列表FindAnotatedBeans(ApplicationContext ApplicationContext){
listbeans=newarraylist();
for(字符串名称:BeanFactoryUtils.BeanNamesForTypeIncludingOrients(applicationContext,Object.class)){
if(applicationContext.FindAnotationBean(name,ControllerAdvice.class)!=null){
add(new controlleradvicean(name,applicationContext));//第一个参数传递的字符串
}
}
返豆;
}
我是否遗漏了
@ControllerAdvice
?或者这是一个bug?您的期望是什么?修复此问题并支持订购的
,将是非常好的。如果太复杂,那么至少我们应该更新文档。有关最新详细信息,请参阅相关的Spring GitHub问题: