Issue 1:
I have searched the issues of this repository and believe that this is not a duplicate.

I have checked the FAQ of this repository and believe that this is not a duplicate.

Environment

Dubbo version: 2.6.5/2.7.4.x

Operating System version: OSX 10.x

Java version: 1.8

在配置 dubbo.provider.token 后，有时 dubbo url 中 default.token 的值会变成 false，而非配置的 token。原因是 getMethods()、getDeclaredMethods() 不保证顺序，导致属性绑定失败。

Spring Boot 中，dubbo 会注入多个beanPostProcessor，在 postProcessBeforeInitialization 阶段，利用 dubboConfigBinder 对 dubbo 相关的 XxxConfig bean 进行属性绑定。如下图所示， ProviderConfig 类是一个 bean

dubboConfigBinder 在 boot 项目中，默认的实现是 RelaxedDubboConfigBinder，具体实现方式是使用 Binder 类，此处可看源码。

绑定属性过程中，利用 JavaBeanBinder$Bean 缓存相关类属性的 getter、setter 方法。

private final Map<String, BeanProperty> properties = new LinkedHashMap<>();

Bean(ResolvableType resolvableType, Class<?> type) {
this.resolvableType = resolvableType;
this.type = type;
putProperties(type);
}
private void putProperties(Class<?> type) {
while (type != null && !Object.class.equals(type)) {

// getDeclaredMethods() 返回方法顺序的具有不确定性
for (Method method : type.getDeclaredMethods()) {
if (isCandidate(method)) {
addMethod(method);
}
}
for (Field field : type.getDeclaredFields()) {
addField(field);
}
type = type.getSuperclass();
}
}

由于 getDeclaredMethods() 返回方法顺序的不确定性，AbstractServiceConfig 存在两个 setToken(boolean) 和 setToken(string)，

因此当 setToken(boolean) 顺序靠前时，因为方法参数类型不满足，就无法绑定。

以下为 setToken(string) 顺序靠前时，正确的绑定内容

在之后运行到触发 ContextRefreshedEvent 事件后，ServiceBean 执行 export() 方法，其中会填充 provider 的属性。调用栈如下。

ServieBean#export()
|- doExport()
|- checkDefault()
|- AbstractConfig.appendProperties(provider)

在 appendProperties 的实现中，getMethods 返回的方法顺序，也是 setToken(boolean) 优先。

通过反射将属性注入 ProviderConfig，在注入之前，会通过 getter 方法判断属性是否已经设置，如果在前一步 Spring 的属性绑定中是正确的，因为 token 已经有值，则不会运行的注入以下代码。

// AbstractConfig.appendProperties(provider)
if (value != null && value.length() > 0) {
method.invoke(config, new Object[]{convertPrimitive(method.getParameterTypes()[0], value)});
}

此处注入时，因为此处的方法是 setToken(boolean)。，convertPrimitive 会将 string 类型的 token 转换的目标的 boolean 类型，Boolean.valueOf 方法就会将我们填写的 string 类型转换为 false 了。

以上就是 default.token=false 的原因

Issue 2:
I have searched the issues of this repository and believe that this is not a duplicate.

I have checked the FAQ of this repository and believe that this is not a duplicate.

Environment

Dubbo version: 2.7.3

Operating System version: macOs sierra

Java version: 1.8

Steps to reproduce this issue

start the provider

dynamic config changed through override://ip:port?xx=xxx

service unregistered with provider url changed.

From: RegistryProtocol.java

public <T> void reExport(final Invoker<T> originInvoker, URL newInvokerUrl) {
...
if (providerInvokerWrapper.isReg() && !registeredProviderUrl.equals(providerInvokerWrapper.getProviderUrl())) {
unregister(registryUrl, providerInvokerWrapper.getProviderUrl());
register(registryUrl, registeredProviderUrl);
newProviderInvokerWrapper.setReg(true);
}
...
}

Pls. provide [GitHub address] to reproduce this issue.

Expected Result

Different registry have different interface for dynamic config changed. For our registry, unregister will cause service be pulled out. But for some registry, maybe they are relying on the unregister and register. We have to find out the way to compatible with different registry.

If there is an exception, please attach the exception trace:

Just put your stack trace here!