在使用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包可以看成壓縮包的形式打開。