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

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

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

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

[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

上面都是我的经验之谈