java - Spring IoC:使用构造函数自动装配进行空检查的原因
问题描述
在 spring autowring 中使用 null 检查的原因是什么?
例如,我经常看到这样的代码:
@Component
public class MyComponent {
private final MyService myService;
@Autowired
public MyComponent(MyService myService) {
Assert.notNull(myService, "myService must not be null");
this.myService = myService;
}
}
Assert.notNull()
在这里打电话有什么意义?
如果我忘记声明MyService
为 Bean Spring 将失败:
NoSuchBeanDefinitionException:没有“com.company.MyService”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。
当然,在某些特殊情况下,可以自动装配空 bean。但是这些案例在真正设计良好的代码中有多重要?
解决方案
代码毫无意义。如果在上下文中找不到候选 bean,Spring 将抛出NoSuchBeanDefinitionException 。这是框架的核心行为,我看不出有任何理由再猜测它。
您可以指定自动装配的 bean 是可选的:
@Autowired(required = false)
但随后空检查就更没有意义了。
推荐阅读
- akka - 为 EventSourcedBehaviorTestKit 禁用 Java 序列化
- locust - 如何在 Locust 中配置日志记录?
- elasticsearch - Elasticsearch 应该使用 must_not - 非嵌套
- javascript - 欢迎留言 Discord.js
- python - 检查字符串是否包含连续子字符串的最佳方法?
- java - 如何使用映射器翻译变量类型?(DTO 到 DAO)
- python - 尝试将两个浮点数相加时,我得到一个“TypeError:+= 不支持的操作数类型:'float' 和 'list'”?
- javascript - 在 React 中导出和导入 const
- python - 如何将列表作为一组打印?
- c++ - C++ 中的扩展内联汇编:是否有必要保留易失性寄存器?