上周有一个同事遇到了一个非常诡异的问题,对接某个下游系统接口时,创建某个 Bean 使用 @Service 声明后注入到另外一个 Bean 中,使用时出现空指针。也就意味着 Spring 的 Bean 工厂中并没有这个 Bean。 由于根据经验加上 @Service 注解 Bean 的声明肯定没问题,而且 bean name 也没问题,此外公司内部对 Spring 进行二次封装还有一些其他配置,排查了半天。最终几个人一起排查解决掉了。
解决完毕之后,想起来为啥不尝试问 New Bing 呢,发现问 New Bing 的话瞬间就可以解决这个问题。
使用 New Bing 提问一次或两次就很快解决了这个问题。
使用 Spring 进行项目开发,某个 Bean 已经通过 @Service 注解进行标注,但是 Bean 工厂里没有这个 Bean ,有哪些原因?
我可以帮你找到一些可能的原因为什么你的Bean没有被Bean工厂识别。根据搜索结果,有以下几种可能:
我检查了项目没有 @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 工具,解决不了时再考虑请教别人。