所属
spring-context.jar,外部依赖 spring-core.jar、spring-beans.jar、spring-aop.jar。
语法
- @ComponentScan({“com.xiao.hui”,“com.xiao.qiang”})
- @ComponentScan(basePackages = {“com.xiao.hui”,“com.xiao.qiang”})
- @ComponentScan(“com.xiao”)
- @ComponentScan(value = “com.xiao”)
- @ComponentScan(basePackages = { “com.xiao” })
- @ComponentScan(basePackageClasses=xxx.class)
参数
- basePackages:Spring将扫描的基础package名,Spring会扫描该包以及其子孙包下的所有类。
- useDefaultFilters:默认为 true,此时 Spring 扫描类时发现如果其被标注为 @Component、@Repository、@Service、@Controller、@Configuration 则自动实例化为 bean 并将其添加到上下文中,如果设置为 false,即使将其标注为 @Component 或者其他,Spring 都会忽略。
简介
@ComponentScan 是一个配置项,配置后让 Spring 扫描指定包下面被 @Controller、@Service、@Repository、@Component、@Configuration 注解的类,对其实例化并加入其内部容器中,然后通过 Spring 可以取出其实例。
例子
Spring 项目
@ComponentScan // 默认扫描该注解类所在包
@Configuration // 表示这是配置文件
public class BeanConfig {
}
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
// 默认通过类名第一个字母小写来获取实例化的对象
BeanConfig cnf = applicationContext.getBean("beanConfig");
SpringBoot 项目
// @SpringBootApplication 包含了 @Configuration、@ComponentScan
@SpringBootApplication
public class AppMain {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(SpringbootCodeMain.class, args);
BeanConfig cnf = applicationContext.getBean("appMain");
}
}
SpringMVC 项目
// web.xml
<context-param>
<!-- 不配置默认为applicationContext.xml -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springConfig.xml</param-value>
</context-param>
// springConfig.xml
<beans>
<context:component-scan base-package="com.gmtx">
......
</context:component-scan>
</beans>
笔记
@Configuration、@Component、@Repository、@Service、@Controller 都是继承 java.lang.annotation.Annotation
更多
文章同步更新在《小专栏》
学习
https://www.jianshu.com/p/64aac6461d5b