clxy大叔 2013-04-12 21:19
浏览 487
已采纳

关于完全依赖命名规范的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,在我看来根本就是重复作业。

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

  • 写回答

1条回答 默认 最新

  • jinnianshilongnian 2013-04-12 22:07
    关注

    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
    默认情况下会出现命名冲突 当然这个也是可以通过某些手段避免

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 luckysheet
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题