在使用dubbo2.8.4版本的时候,项目中有使用spring的声明式事务,dubbo的服务暴露使用了注解,发现服务一直没被监测到,后面查看源码debug,才发现dubbo有个bug,需要改动源码来修复。
找到com.alibaba.dubbo.config.spring.AnnotationBean类,然后修改
public Object postProcessAfterInitialization(Object bean, String beanName)方法的139行:
if(isProxyBean(bean)){
clazz = AopUtils.getTargetClass(bean);
}
//还没有获取到原始的calss对象,需要进一步解析
if ("$$".contains(clazz.getName())) {
clazz = getSuperclass();
//如果获取值还是代理,则需要进一步解析
if (clazz.getSimpleName().contains("$$")) {
clazz = clazz.getSuperclass();
}
Service service = clazz.getAnnotation(Service.class);
public Object postProcessBeforeInitialization(Object bean, String beanName)方法的217行:
if(isProxyBean(bean)){
clazz = AopUtils.getTargetClass(bean);
}
//还没有获取到原始的calss对象,需要进一步解析
if ("$$".contains(clazz.getName())) {
clazz = getSuperclass();
//如果获取值还是代理,则需要进一步解析
if (clazz.getSimpleName().contains("$$")) {
clazz = clazz.getSuperclass();
}
Method[] methods = clazz.getMethods();
修改完后,重新编译,然后将此类替换掉下载的jar包里的类。ps:jar包可以看成压缩包的形式打开。