•BeansException 子类型
spring设计的技巧就是spring中比较讨厌排斥check类型异常,也就是try...catch强制检查的异常,全部基本上用的是runtime异常类型,因此在接口上不需要声明一下,必须要用哪个接口,在调用的时候不需要到处去try...catch;传统javaee基本上都是一些check型异常居多。
异常类型 | 触发条件(举例) | 场景举例 |
---|---|---|
NoSuchBeanDefinitionException | 当查找Bean 不存在于IoC 容器时 | BeanFactory#getBean ObjectFactory#getObject |
NoUniqueBeanDefinitionException | 类型依赖查找时,IoC 容器存在多个Bean 实例 | BeanFactory#getBean(Class)(getBean(String.class),在这个bean上面标注primary解决这个异常) |
BeanInstantiationException | 当Bean 所对应的类型非具体类时(接口) | BeanFactory#getBean |
BeanCreationException | 当Bean 初始化过程中 | Bean 初始化方法执行异常时(bean和creation都是名称表示创建时异常) |
BeanDefinitionStoreException | 当BeanDefinition 配置元信息非法时 | XML 配置资源无法打开 |
BeanCreation时顺序很重要,在初始化bean时,注意它的执行顺序,注意适当的try...catch,如果初始化的时候需要显示的去抛异常,如果它就是错了,不能让它通过,这是一种设计,fast-fail;
spring应用中遇到异常多看提示,cause by最终trace的原因,往上找spring异常的提示;