异常: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代理同时拦截了接口中方法的调用和实现中的调用,具体原因不明。