SuperCRM
2011-01-07 01:04
浏览 284
已采纳

配置文件中annotation-scan特别不理解的地方

大家好:
在spring的application的配置文件中有一些对包中的注解进行扫描范围的设定,比如:
扫描spring的注解
[code="java"][/code]再比如,扫描dwr的注解:
[quote][/quote]
在上面两个扫描配置中【这里可以设定需要扫描的路径1】【这里可以设定需要扫描的路径2】的地方可以设定具体的包的路径,可是我也可以直接写一个根路径,比如【com】,也就可扫描整个项目中的java代码中的相对应的注解了,不必关心具体路径。

困惑之处:既然设置了【com】就可以扫描整个项目,不用管理action的具体路径,暴露的dwr类的具体路径,那么spring何必将其做成可以指定到具体目录的方式?用意何在?(难道指定整个项目的跟路径运行效率更低下?)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • lang_shao 2011-01-07 08:26
    已采纳

    “指定到具体目录的方式”可以让开发者自己选择哪些才纳入管理,如果开发者引入了第三方jar,而这个jar中也用了注解,开发者不希望这个jar被注解的纳入管理,那就很有用了。
    Spring是为了满足各种开发者的需要,而不是那么死板的。

    点赞 评论
  • beneo 2011-01-07 08:25

    [quote]困惑之处:既然设置了【com】就可以扫描整个项目,不用管理action的具体路径,暴露的dwr类的具体路径,那么spring何必将其做成可以指定到具体目录的方式?用意何在?(难道指定整个项目的跟路径运行效率更低下?)
    [/quote]

    首先,annotation能够帮助我么减少xml配置文件的数量,有时候一个工程海量的xml让人非常头疼(其实这个有利有弊,我觉得annotation减少了bean之见的关联,让程序员在维护代码的时候,会感觉到不连续)

    对于你的问题
    其一,我们在使用annotations-scan的时候,不是scan根目录的。这是因为test的原因。好比说我们需要对datasource进行测试
    [code="java"]@Runwith(Junit4SpringUnitxxx.class)
    @Configuration(localtions={applicationDatasource.xml})
    public Demo {
    @Autowired
    Datasource datasource;

    @Test
    public void getConection_Accuracy() {
    // .....
    }
    }[/code]
    这个时候,我们不需要把所有的spring配置文件都加载进来。我们有用的是annotation的方式,所以scan的路径要指定的好一些

    其二,有时候我们须要做到,在runtime的时候扫描annotation,这是hotswap要用的,我们需要有个东西能够自动注册spring的bean,这就是annotaions-scan

    上面都是我的经验之谈

    点赞 评论

相关推荐 更多相似问题