spring就是一个依赖注入框架,所有的内容都是关于bean的定义及其依赖关系
定义Spring Beans的第一步是使用正确的注解@Component或@Service或@Repository
但是,Spring不知道你定义了某个bean除非它知道从哪里可以找到这个bean
ComponentScan做的事情就是告诉Spring从哪里找到bean
由你来定义哪些包需要被扫描。一旦你指定了,Spring将会将在被指定的包及其下级包(sub packages)中寻找bean
-- 扫描一个包
定义@CoponentScan(“com.demo”)
这么做扫描的范围扩大到整个父包com.demo
-- 扫描两个包
定义分别扫描两个包
@ComponentScan({“com.demo.springboot”,”com.demo.somethingelse”})
有的时候你回遇到这样的错误
WARNING: No mapping found for HTTP request with URI [/spring-mvc/login] in DispatcherServlet with name ‘dispatcher’
WARNING: No mapping found for HTTP request with URI [/list-todos] in DispatcherServlet with name ‘dispatcher’
或者:
ERROR:No qualifying bean of type [com.demo.springboot.jpa.UserRepository] found for dependency [com.demo.springboot.jpa.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}…
或者 :
直接报找不到某个类
报错的根因都是bean没有被Spring找到
遇到这些错误你应该检查:
你是否给类加了正确的注解@Controller,@Repository,@Service或@Component
你是否在应用上下文定义了Component Scan
报错类所在的包是否在Component Scan中指定的包的范围
@Component 和@ComponentScan 的区别
@Component 和 @ComponentScan的使用目的不一样
在某个类上使用@Component注解,表明当需要创建类时,这个被注解的类是一个候选类。就像是举手。
@ComponentScan用于扫描指定包下的类。就像看都有哪些举手了。