Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring IoC:使用构造函数自动连接进行空检查的原因_Java_Spring_Dependency Injection_Spring Ioc - Fatal编程技术网

Java Spring IoC:使用构造函数自动连接进行空检查的原因

Java Spring IoC:使用构造函数自动连接进行空检查的原因,java,spring,dependency-injection,spring-ioc,Java,Spring,Dependency Injection,Spring Ioc,在spring autowring中使用空检查的原因是什么 例如,我经常看到这样的代码: @Component public class MyComponent { private final MyService myService; @Autowired public MyComponent(MyService myService) { Assert.notNull(myService, "myService must not be null");

在spring autowring中使用空检查的原因是什么

例如,我经常看到这样的代码:

@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个符合autowire候选条件的bean

当然,在某些情况下,在某些特定条件下,可以自动连接null bean。但是这些情况在真正设计良好的代码中有多重要呢

这里的Assert.notNull()调用有什么意义


在这种情况下,您可以由构造函数自动连接,断言的目的是确保服务已被正确地注入,而不是
null
,以免将来出现任何问题。尽管在没有定义正确类型的bean时会抛出
NoSuchBeanDefinitionException
,但是仍然可能会注入
null
,并且自动连线机制不会处理它,因为这不是它的目的。

代码毫无意义。如果在上下文中找不到候选bean,Spring将抛出一个NoSuchBeanDefinitionException。这是框架的核心行为,我不认为有任何理由对此进行二次猜测

您可以指定自动连线bean是可选的:

@Autowired(required = false)

但是空检查的意义就更小了。

当任何开发人员以普通Java方式创建对象时,如
“new Bean(null)”
或使用
“null”
标记将
null
作为基于XML的注入中的值传递时,空检查非常有用。在这两种情况下,这个断言将在bean创建本身时发出

多谢各位。问题是,即使您想要人为地模拟一种注入null的情况,也不是那么简单。我不得不用谷歌搜索如何做到这一点。从这个角度来看,编写断言是没有用的。