在项目中因为ComponentScan的错误使用,产生了bug,特来记录一下。
使用@ComponentScan注解,能够在Spring中启用逐渐扫描。
如果没有其他配置的话,按照默认规则,@ComponentScan会以配置类所在的包作为基础包(base package)来扫描组件。
有一个原因会促使我们明确地设置基础包,那就是我们想要将配置放置在单独的包里,使其与其他的应用代码区分开来。
为了指定不同的基础包,所需要做的就是在@ComponentScan的value属性中指明包的名称:
@Configuration@ComponentScan("soundsystem")public class CDPlayerConfig {}复制代码
如果你想更加清晰地表明你所设置的是基础包,那么可以通过backPackages属性进行配置:
@Configuration@ComponentScan(basePackages="soundsystem")public class CDPlayerConfig {}复制代码
如果需要设置多个基础包,只需要将basePackages属性设置为要扫描的包的一个数组即可:
@Configuration@ComponentScan(basePackages={ "soundsystem", "video"})public class CDPlayerConfig {}复制代码
在上面例子中,所设置的基础包是以String类型表示的,但这种方法是类型不安全(not type-safe)的。如果你重构代码的话,那么指定的基础包就可能出现错误。
除了将包设置为简单的String类型之外,@ComponentScan还提供了另外一种方法,就是将其指定为包中所含的类或接口:
@Configuration@ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class})public class CDPlayerConfig {}复制代码