同事一小时没解决的问题,被 New Bing 秒解了

作者:明明如月学长, CSDN 博客专家,蚂蚁集团高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。

热门文章推荐

一、背景

上周有一个同事遇到了一个非常诡异的问题,对接某个下游系统接口时,创建某个 Bean 使用 @Service 声明后注入到另外一个 Bean 中,使用时出现空指针。也就意味着 Spring 的 Bean 工厂中并没有这个 Bean。
由于根据经验加上 @Service 注解 Bean 的声明肯定没问题,而且 bean name 也没问题,此外公司内部对 Spring 进行二次封装还有一些其他配置,排查了半天。最终几个人一起排查解决掉了。
New bing 秒解问题.png
解决完毕之后,想起来为啥不尝试问 New Bing 呢,发现问 New Bing 的话瞬间就可以解决这个问题。

二、使用 New Bing 秒解

使用 New Bing 提问一次或两次就很快解决了这个问题。

使用 Spring 进行项目开发,某个 Bean 已经通过 @Service 注解进行标注,但是 Bean 工厂里没有这个 Bean ,有哪些原因?

image.png
我可以帮你找到一些可能的原因为什么你的Bean没有被Bean工厂识别。根据搜索结果,有以下几种可能:

  • 你的 Bean 没有被 Spring 扫描到,你需要检查你的 @ComponentScan 注解是否包含了你的 @Service 注解所在的包。
  • 你的 Bean 没有实现一个接口,或者实现了多个接口,导致 Spring 无法确定它的类型。你需要指定一个主要的接口或者使用 @Primary 注解来标注一个优先的实现类。
  • 你的 Bean 是一个非自定义的类,比如第三方库中的类,你需要使用 @Bean 注解来在一个配置类中创建它的实例,并交给 Spring 管理。
  • 你的 Bean 依赖了其他的 Bean,但是其他的 Bean 没有被正确地初始化或者注入。你需要检查你的@Autowired 注解是否正确使用,或者使用 @DependsOn 注解来指定依赖关系。

我检查了项目没有 @ComponentScan 注解,其他的 bean 都是通过 xml 进行配置的都正常 ,就这个 bean 使用 @Service 声明的,无法识别,是什么原因

image.png

根据你的描述,我猜测你的项目是使用 xml 配置的 Spring 容器,而不是注解配置的。如果是这样的话,你需要在你的xml配置文件中添加 <context:component-scan>标签,来指定扫描你的 @Service注解所在的包。
例如,如果你的 @Service注解在 com.spring.quickTest包下,你需要在xml文件中添加如下内容:
<context:component-scan base-package="com.spring.quickTest"/>
这样,Spring 就能够识别你的 @Service 注解,并将其注册为一个 Bean。

最后发现,和我们自己排查的结论类似,该模块确实没有配置 <context:component-scan> 因此不支持通过注解来声明 bean。

三、总结

看完问题之后,很多同学或许会认为这也不难啊。其实很多奇奇怪怪的问题都是这样,当你解决之后的确不难,但遇到问题时,可能会受到其他线索干扰,很可能没有第一时间想到这个问题。

人工智能时代已经来临,但是我们不自觉的还是会使用传统的方式来解决问题
Xnip2023-04-09_16-45-43.png
做一个真正 AI 时代的程序员,我们在遇到一些奇奇怪怪的,一些不容易解决的问题,没有明确的思路时,可以优先考虑问 AI 工具,解决不了时再考虑请教别人。


创作不易,如果本文对你有帮助,欢迎点赞、收藏加关注,你的支持和鼓励,是我创作的最大动力。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/w605283073/article/details/130044372
今日推荐