在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可用:预计至少有一个bean可以作为autowire候选者。
当然,有一些极端情况下,在某些特定条件下,可以自动装配null bean。但这些案例在真正精心设计的代码中有多重要?
答案 0 :(得分:1)
Assert.notNull()在这里调用的重点是什么?
在这种情况下,您通过构造函数进行自动装配,并且断言的目的是确保服务在{/ 1}之前正确地注入了 之前它将导致任何麻烦。虽然在没有定义正确类型的bean时抛出null
,但仍然可能注入NoSuchBeanDefinitionException
并且自动装配机制不会处理它,因为它不是它的用途。
答案 1 :(得分:1)
代码毫无意义。如果在上下文中找不到候选bean,Spring将抛出 NoSuchBeanDefinitionException 。这是框架的核心行为,我认为没有任何理由再次猜测它。
您可以指定aoutwired bean是可选的:
@Autowired(required = false)
然后空检查更没意义。
答案 2 :(得分:1)
当任何开发人员以纯Java方式(例如"new Bean(null)"
)来创建对象时,这很有用;或者也可以使用null
标签将"null"
作为基于XML的注入中的值来传递。在这两种情况下,该断言都会在bean创建本身时大声疾呼。