Springboot 的 @ComponentScan

纵饮孤独 提交于 2019-11-30 11:09:04

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用于扫描指定包下的类。就像看都有哪些举手了。 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!