Spring框架提供了一种方便的方式来自动扫描和装配应用程序中的组件,包括类、接口、注解等。那么,Spring扫描包时哪些会被扫描,哪些不会被扫描呢?
首先,Spring会扫描配置类所在的包及其子包。这意味着,如果我们在一个包下创建了一个标有@Configuration注解的配置类,Spring会自动扫描这个包及其子包下的所有组件。例如,如果我们的配置类位于com.example.config包下,那么Spring将扫描com.example.config及其子包下的组件。
其次,Spring会扫描标有@Component注解的类。这意味着,如果我们在应用程序中使用了@Component注解来标记某个类,Spring将会自动扫描并装配这个类。这个注解通常用于标识一个普通的Bean类。
除了@Component注解外,Spring还会扫描其他一些特殊的注解。比如,标有@Repository、@Service、@Controller等注解的类,都会被Spring扫描并自动装配。这些注解分别用于标识持久层、服务层和控制层的组件。
需要注意的是,Spring默认只会扫描@Configuration、@Component、@Repository、@Service、@Controller等注解所在的包及其子包下的组件。如果我们需要扫描其他类型的注解或其他包,可以使用@ComponentScan注解来配置。通过@ComponentScan注解,我们可以指定要扫描的包或类,并设置扫描的范围。
另外,Spring还提供了一些排除特定组件扫描的方式。比如,可以使用@Configuration注解的excludeFilters属性来排除某些组件扫描。可以根据自己的需求,通过配置excludeFilters属性来控制扫描范围。
综上所述,Spring框架扫描包时会默认扫描配置类所在包及其子包下的@Component、@Repository、@Service、@Controller等注解标注的类。同时,也可以通过@ComponentScan注解来配置指定要扫描的包或类,并通过排除特定组件的方式来控制扫描范围。