Spring开发常见异常及原因列表

异常:Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springweb.service.impl.HelloServiceImpl.setTypeMap(java.util.Map); nested exception is org.springframework.beans.FatalBeanException: Key type [class java.lang.Integer] of map [java.util.Map] must be assignable to [java.lang.String]  


原因:spring使用Autowired进入注入时,map的key类型只能为string

 

异常:子类注入配置没有加上abstract="true"的话,最终objList会有三个对象,包括baseObj  sonObj1   sonObj2

<bean id="baseObj" abstract="true" class="BaseObj" />
<bean id="sonObj1" class="SonObj1" parent="baseObj/>
<bean id="sonObj2" class="SonObj2" parent="baseObj/>
<bean id="objList" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="sonObj1"/>
<ref bean="sonObj2"/>
</list>
</constructor-arg>
</bean>

 

异常:org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2:

测试XML中配置了多个数据源,需要指定注入那个数据源。

public class BaseSpringContextTestSupport extends AbstractTransactionalJUnit38SpringContextTests{
 @Override
 @Resource(name = "dataSourceCol")
 public void setDataSource(DataSource dataSource) {
   super.setDataSource(dataSource);
 }
}

 

 异常:Service层new Thread().start();访问Hibernate DaO层,Hibernate报找不到Session。

Hibernate的Session是以ThreadLocal的方式在会话期间保存的,每一个线程关联一个Session,在Service层启动的异步线程关联不到Hibernate Session。


JUnit测试的时候,一个Test Class下面有多个test方法的同时,有构造函数和@Before setup()方法。每次执行test方法前都会执行初始化和setup()方法。造成不同test方法是由不同的Test实例运行的,test()方法之间无法共享测试进度数据。


异常:Jackson ObjectMapper将JSON转换为范型对象异常:

ClassCastException: java.util.LinkedHashMap cannot be cast 

解决:List<Object> batchProtocolList = objectMapper.readValue(requestBody, new TypeReference<List<Object>>(){});

原因:不明。


异常:Jackson ObjectMapper将JSON转换为范型对象异常:

ClassCastException: java.util.LinkedHashMap cannot be cast 

解决:List<Object> batchProtocolList = objectMapper.readValue(requestBody, new TypeReference<List<Object>>(){});

原因:不明。

 

异常:Service接口和Service实现在同一个package下,Spring AOP doBefore方法被执行了两次。
解决:将@Pointcut("execution(* org.aop.service.*.*(..))") 修改成@Pointcut("execution(* org.aop.service.*ServiceImpl.*(..))") ;
这样只匹配Service实现。
原因:AOP代理同时拦截了接口中方法的调用和实现中的调用,具体原因不明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值