linking12 / spring-boot-starter-dubbo

48 stars 29 forks source link

使用spring-boot-devtools 后, 无法注入 @Reference对象 #1

Closed avkojwer1 closed 7 years ago

avkojwer1 commented 7 years ago

hi, 加入spring boot 热编译后, @Reference对象无法被注入

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
linking12 commented 7 years ago

这个问题的根源是热部署的时候使用的classloader和dubbo获取代理对象使用的classloader不一致导致的; 热部署使用的classloader是org.springframework.boot.devtools.restart.classloader.RestartClassLoader dubbo获取代理对象使用的classloader是AppClassLoader 修改的话: 需要更改dubbo的代码: /* * Get proxy. * * @param ics interface class array. * @return Proxy instance. / public static Proxy getProxy(Class<?>... ics) { return getProxy(ClassHelper.getCallerClassLoader(Proxy.class), ics); }

更改为: public static Proxy getProxy(Class<?>... ics) { return getProxy(ClassHelper.getClassLoader(Proxy.class), ics); } 这个改动的话,最好是自行更改并测试下,不是spring boot插件的范围

avkojwer1 commented 7 years ago

好的, 感谢