代码拉取完成,页面将自动刷新
实现类方法上注解 @Transactional以后,就会发生serviceBean.getClass().getAnnotation(RpcService.class)为空的问题,因为serviceBean.getClass()是代理类,拿不出真实的class,我需要的不是分布式事务,只是想远程调用的服务能够用spring原生的事务,请问下怎么解决??
RpcService rpcService = serviceBean.getClass().getAnnotation(RpcService.class);
if(rpcService == null){
try{
Field h = serviceBean.getClass().getSuperclass().getDeclaredField("h");
h.setAccessible(true);
AopProxy aopProxy = (AopProxy) h.get(serviceBean);
Field advised = aopProxy.getClass().getDeclaredField("advised");
advised.setAccessible(true);
Object target = ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget();
rpcService = target.getClass().getAnnotation(RpcService.class);
}catch(Exception e){
e.printStackTrace();
}
}
if(rpcService == null){
System.out.println("========error,rpcService is null===================");
}else{
String serviceName = rpcService.value().getName();
String serviceVersion = rpcService.version();
if (StringUtil.isNotEmpty(serviceVersion)) {
serviceName += "-" + serviceVersion;
}
handlerMap.put(serviceName, serviceBean);
}
空指针的问题我已经解决了,但是只要加了事务,到RpcServerHandler中的反射调用,整个server就会家死住,应该是产生了死锁,麻烦问下怎么解决
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论