首页 > 解决方案 > 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。但是这些案例在真正设计良好的代码中有多重要?

标签: javaspringdependency-injectionspring-ioc

解决方案


代码毫无意义。如果在上下文中找不到候选 bean,Spring 将抛出NoSuchBeanDefinitionException 。这是框架的核心行为,我看不出有任何理由再猜测它。

您可以指定自动装配的 bean 是可选的:

@Autowired(required = false)

但随后空检查就更没有意义了。


推荐阅读