首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >咦!Spring容器里为什么没有我需要的Bean?

咦!Spring容器里为什么没有我需要的Bean?

原创
作者头像
菜菜的后端私房菜
发布2024-08-16 08:48:48
发布2024-08-16 08:48:48
1.3K0
举报

咦!Spring容器里为什么没有我需要的Bean?

小故事

有一天,项目经理收到一个紧急需求,需要新增一个模块,项目经理看了看开发区的同学,一眼就看到盯着屏幕笑嘻嘻的小菜同学

项目经理心想:这傻小子在乐什么呢,肯定是在摸鱼,就让新需求给他做吧

项目经理悄咪咪的偷摸到小菜身后,看着小菜在沸点评论区不停的滑动,似乎在寻找着什么大瓜

此时的小菜似乎察觉到气氛不太对劲,身后似乎有人,于是飞快的按下 Windows + 1 弹出Idea的开发界面

此时,项目经理开口道:小菜啊,这里有个紧急需求,新增了一个模块,你新建一个SpringBoot项目把这些需求写一下吧~

小菜只能不情愿的接到需求,从而放弃摸鱼,开始开发

精通CRUD的小菜立马Copy出一个新项目

很快啊,啪的一下~写出启动类加上@SpringBootApplication注解

代码语言:java
复制
package com.caicaijava.springbooteasyframeworks;

@SpringBootApplication
public class SpringBootEasyFrameworksApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootEasyFrameworksApplication.class, args);
	}

}

然后小菜建立了一个controller包开始认真开发...

没过多久,小菜就把需求都搞定了,于是启动服务开始测试

小菜打开测试工具就开始测试接口,但是怎么测试都是404,一开始小菜还以为url写错了,但是检测后发现并没有写错

经过小菜漫长的排查,终于发现了问题:原来是小菜把controller包不小心创建在springbooteasyframeworks包的同级目录

image.png
image.png

启动类中的@SpringBootApplication中包含@ComponentScan

代码语言:java
复制
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

@ComponentScan**会去扫描包下的组件,并把组件加入到容器中,由于没有配置**basePackages**字段,于是只会扫描当前包下的组件**

当前包也就是com.caicaijava.springbooteasyframeworks

于是controller包与其同级时无法扫描其中的组件,因此导致容器中找不到对应的Bean

如果需要扫描其他包,或者需要依赖公共项目common下的包时,可以使用配置basePackages如果已经配置**basePackages**则不会默认扫描当前包,于是也要把当前包加上

代码语言:java
复制
@SpringBootApplication
@ComponentScan(basePackages = {"com.caicaijava.common","com.caicaijava.springbooteasyframeworks"})
public class SpringBootEasyFrameworksApplication {

    public static void main(String[] args) {
       SpringApplication.run(SpringBootEasyFrameworksApplication.class, args);
    }

}

总结

@SpringBootApplication**默认只扫描当前包下的组件,如果需要扫描其他包,需要配置**@ComponentScan**的**basePackages**或**value**字段**

当配置过**@ComponentScan**时,默认不会扫描当前包下的组件,注意把当前包也加入配置

🌠最后(一键三连求求拉~)

本篇文章被收入专栏 深入浅出常用框架,感兴趣的同学可以持续关注喔

本篇文章笔记以及案例被收入 Gitee-CaiCaiJavaGithub-CaiCaiJava,除此之外还有更多Java进阶相关知识,感兴趣的同学可以starred持续关注喔~

有什么问题可以在评论区交流,如果觉得菜菜写的不错,可以点赞、关注、收藏支持一下~

关注菜菜,分享更多技术干货,公众号:菜菜的后端私房菜

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 咦!Spring容器里为什么没有我需要的Bean?
    • 小故事
    • 总结
    • 🌠最后(一键三连求求拉~)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档