@Override
    public void bind(
            Map<String, Object> configurationProperties,
            boolean ignoreUnknownFields,
            boolean ignoreInvalidFields,
            Object configurationBean) {

        Iterable<PropertySource<?>> propertySources =
                asList(new MapPropertySource("internal", configurationProperties));

        // Converts ConfigurationPropertySources
        Iterable<ConfigurationPropertySource> configurationPropertySources = from(propertySources);

        // Wrap Bindable from DubboConfig instance
        Bindable bindable = Bindable.ofInstance(configurationBean);

        Binder binder =
                new Binder(configurationPropertySources, new PropertySourcesPlaceholdersResolver(propertySources));

        // Get BindHandler
        BindHandler bindHandler = getBindHandler(ignoreUnknownFields, ignoreInvalidFields);

        // Bind
        binder.bind("", bindable, bindHandler);
    }
@Test
    void testBinder() {

        ApplicationConfig applicationConfig = new ApplicationConfig();
        Map<String, Object> properties = getSubProperties(environment.getPropertySources(), "dubbo.application");
        dubboConfigBinder.bind(properties, true, true, applicationConfig);
        Assert.assertEquals("hello", applicationConfig.getName());
        Assert.assertEquals("world", applicationConfig.getOwner());

        RegistryConfig registryConfig = new RegistryConfig();
        properties = getSubProperties(environment.getPropertySources(), "dubbo.registry");
        dubboConfigBinder.bind(properties, true, true, registryConfig);
        Assert.assertEquals("10.20.153.17", registryConfig.getAddress());

        ProtocolConfig protocolConfig = new ProtocolConfig();
        properties = getSubProperties(environment.getPropertySources(), "dubbo.protocol");
        dubboConfigBinder.bind(properties, true, true, protocolConfig);
        Assert.assertEquals(Integer.valueOf(20881), protocolConfig.getPort());
    }