zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

问题 解决 小时 New Bing 同事
2023-06-13 09:18:26 时间

一、背景

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

解决完毕之后,想起来为啥不尝试问 New Bing 呢,发现问 New Bing 的话瞬间就可以解决这个问题。

二、使用 New Bing 秒解

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

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

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

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

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

根据你的描述,我猜测你的项目是使用 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。

三、总结

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

人工智能时代已经来临,但是我们不自觉的还是会使用传统的方式来解决问题

做一个真正 AI 时代的程序员,我们在遇到一些奇奇怪怪的,一些不容易解决的问题,没有明确的思路时,可以优先考虑问 AI 工具,解决不了时再考虑请教别人。