我读到如果容器找不到依赖注入的bean,则@Required注释抛出此异常:
org.springframework.beans.factory.BeanInitializationException
对于@Autowired,例外是:org.springframework.beans.factory.BeanCreationException
考虑这些情况: 我在bean A中使用@Required来注入另一个不存在的bean B,然后启动应用程序。 我在bean A中使用@Autowired来注入另一个不存在的bean B,然后启动应用程序。
我想知道什么时候抛出@Required和@Autowired的异常?是在同一时间吗?加载spring应用程序上下文时?
答案 0 :(得分:2)
@Required
和RequiredAnnotationBeanPostProcessor
由@Autowired
处理 AutowiredAnnotationBeanPostProcessor
注释。根据源代码here和here,这两个后处理器都是有序的。 @Autowired
的顺序为Integer.MAX_VALUE - 2
,而@Required
的顺序为Integer.MAX_VALUE - 1
。根据{{3}},值越高优先级越高。
基于此,我相信@Autowired
bean post处理器将在@Required
之前运行。因此,为了回答您的问题,@Autowired
的可能异常将在创建spring应用程序上下文时@Required
之前抛出。