场景
当xml文件中存在这样的配置时
而当你在写case使用@XAutowire使用接口注入时,会报一下异常信息
org.springframework.beans.factory.BeanNotOfRequRequiredTypeException: Bean named 'bankTockenService' is expected to be of type 'e 'com.mybank.bkebank.biz.shared.tocken.BankTockenSernServiceImpl' but was actually of type 'e 'com.sun.proxy.$xy.$Proxy401'
大概的意思是:你申明的是protected BankTockenServiceImpl bankTockenService,但是你从module= "com.mybank.bkebank.biz.shared" 这个spring容器里拿到一个被代理过的对象 是Proxy类型的
解决方法(这里以TestNG为例):
第一步
在case中使用工具类获取到真正的实现类对象
@BeforeClass
@Override
public void setUp(){
workOrderTaskApprovalQueryManager = BeanUtil.getTargetBean(workOrderTaskApprovalQueryManager);
}
第二步
在需要使用实现类的地方,将接口强转这里不再多述
下面是BeanUtil具体实现有兴趣的可以看下
public class BeanUtil {
public static <T> T getTargetBean(Object bean) {
Object object = bean;
while (AopUtils.isAopProxy(object)) {
try {
object = ((Advised) object).getTargetSource().getTarget();
} catch (Exception e) {
throw new RuntimeException("get target bean failed", e);
}
}
return (T) object;
}
}