【面试必问】Spring支持注入null和空字符串吗?不懂别去面试了!

小米的故事:面试场上“翻车”的瞬间

先讲个小故事。

上个月我去面试一家AI初创公司,对方面试官是个大胡子的中年大哥,眼神犀利,一上来寒暄几句之后就抛来一个问题:

“你可以在Spring中注入一个 null 吗?或者注入一个空字符串呢?”

???

我当时脑袋一懵。

“这啥鬼问题,太简单了吧?”我心里想着,“当然可以啊,只要给个配置就好。”但我隐隐感觉有点不对劲,于是我开始结结巴巴地分析起来,什么默认值啦、@Value啦、Bean注入啦,整了个大概三分钟的回答。

大哥微微一笑,说:

“你说的不是错,但还是太表面了。你真的知道 Spring 是怎么处理这些注入的吗?”

……

那一刻,我知道,我掉坑里了。

于是,我决定回家把这问题彻底研究透。今天就跟大家一起复盘这个“看似简单但细思极恐”的问题。

问题重述:Spring 中能注入 null 和空字符串吗?

这是一道典型的“你以为你懂,其实不懂”的面试题。

我们来把问题拆解一下:

  • 能不能通过 Spring 注入一个 null?
  • 能不能通过 Spring 注入一个空字符串?
  • 注入方式不同,结果是否会不同?
  • @Value 注入 vs @Autowired 注入 vs XML配置,有差别吗?

我们一个个来,搞清楚这事。

Spring 中注入 null 的几种方式

1. 配置文件注入 null —— 行不通!

如果你用这种写法:

然后代码里这样注入: