我们在写springmvc+mybatis项目,启动项目的时候,mapper配置文件一直刷,一直加载。。。。。
对于我们伟大的程序猿来说这并不可怕,可怕的是没有错误打印出来。。。。。完全不知道如何下手啊,今天终于找到了一种解决方法
找到org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
类,在下面方法:
protected void autowireByType(
String beanName, AbstractBeanDefinition mbd, BeanWrapper bw, MutablePropertyValues pvs) {
catch (BeansException ex) {
throw new UnsatisfiedDependencyException(mbd.getResourceDescription(), beanName, propertyName, ex);
}
在throw
这一行断点即可,这个地方是最早捕获异常的地方,当Mapper.xml
文件出错的时候,会有异常信息输出。
还有一个问题,为什么出错后只能看到无限输出的一行日志,而看不到这里具体的异常信息呢?
通过追踪代码,发现在org.springframework.beans.factory.support.AbstractBeanFactory
类中的方法:
protected Class<?> getTypeForFactoryBean(String beanName, RootBeanDefinition mbd) {
if (!mbd.isSingleton()) {
return null;
}
try {
FactoryBean<?> factoryBean = doGetBean(FACTORY_BEAN_PREFIX + beanName, FactoryBean.class, null, true);
return getTypeForFactoryBean(factoryBean);
}
catch (BeanCreationException ex) {
// Can only happen when getting a FactoryBean.
if (logger.isDebugEnabled()) {
logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex);
}
onSuppressedException(ex);
return null;
}
}
这里捕获异常后,直接
return null
导致异常被吞。