关于完全依赖命名规范的Spring配置

Spring发展到现在有这么几种配置

[list]
[*]最古老的
[*]annotation加context:component-scan的方式
[/list]
想尝试一种完全依赖命名规范的配置方式。

在不使用@Controller,@Service及@Repository等的情况下仍然能够被正确注册。比如,
[list=1]
[*]所有XxxxAction(或XxxController)的类,自动被注册,且效果等同于@Controller
[*]XxxxService等同于@Service
[*]XxxxDao等同于@Repository
[/list]
其中自动注册部分我通过下面的能够配置搞定
[code="xml"]



/context:component-scan
[/code]

我的问题有几个

[size=x-large][b][color=red]A[/color][/b][/size]:其中上面的2,@Service貌似问题不大,Spring除了注册外似乎没有做特殊处理。如果我错了,请指正。

[size=x-large][b][color=red]B[/color][/b][/size]:有问题的是第1项。如果不使用@Controller,Spring只把类简单注册,并不去管类里面的@requestMapping等配置了。我查下来,似乎需要处理RequestMappingHandlerMapping#isHandler。不知是否正确?

[size=x-large][b][color=red]C[/color][/b][/size]:持久层我使用的是MyBatis,查下来需要改写org.mybatis.spring.mapper.MapperScannerConfigurer,添加includeFilters及excludeFilters。
配置类似上面如下。不知是否有更好方案?
[code="xml"]




<![CDATA[.*(?<!Dao)$]]>



[/code]

-------==== 题外话 ====--------
命名规范貌似不受Spring世界的待见啊!
我个人是倾向于[b]完全只[/b]按命名规范配置。因为在任何规模的开发中,严谨严格的命名规范都是必须的,那么都已经是叫做XxxxController,XxxxService了,还必须加@Controller及@Service,在我看来根本就是重复作业。

这个话题也是个老话题,不过有经验想谈谈的兄弟也请不吝赐教。

A:没什么区别 此处可以加上 use-default-filters="false" 这样就不用默认的了(即加载@Component相关的) 当然也不是必须

B 是的,如果是3.1及之后的,可以覆盖org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 的
[quote]protected boolean isHandler(Class<?> beanType) {
return ((AnnotationUtils.findAnnotation(beanType, Controller.class) != null) ||
(AnnotationUtils.findAnnotation(beanType, RequestMapping.class) != null));
}
[/quote]

或者头上加@RequestMapping

C 没在项目中用过 回答不了

命名规范貌似不受Spring世界的待见啊!
我个人是倾向于完全只按命名规范配置。因为在任何规模的开发中,严谨严格的命名规范都是必须的,那么都已经是叫做XxxxController,XxxxService了,还必须加@Controller及@Service,在我看来根本就是重复作业。

按理说是这样的 但是比如我有个XXXService 不想注册为bean 当然这不是问题 换个名字即可。

不加还一个问题就是比如
a
AbcService
b
AbcService
默认情况下会出现命名冲突 当然这个也是可以通过某些手段避免