优化协议加载

This commit is contained in:
zhouhao 2020-07-18 21:42:41 +08:00
parent 3887d5df03
commit 035d690bf0
1 changed files with 22 additions and 4 deletions

View File

@ -1,20 +1,38 @@
package org.jetlinks.community.standalone.configuration;
import org.jetlinks.supports.protocol.management.MuiltiProtocolSupportLoader;
import org.jetlinks.core.ProtocolSupport;
import org.jetlinks.supports.protocol.management.ProtocolSupportDefinition;
import org.jetlinks.supports.protocol.management.ProtocolSupportLoader;
import org.jetlinks.supports.protocol.management.ProtocolSupportLoaderProvider;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class SpringProtocolSupportLoader extends MuiltiProtocolSupportLoader implements BeanPostProcessor {
public class SpringProtocolSupportLoader implements ProtocolSupportLoader,BeanPostProcessor {
private final Map<String, ProtocolSupportLoaderProvider> providers = new ConcurrentHashMap<>();
public void register(ProtocolSupportLoaderProvider provider) {
this.providers.put(provider.getProvider(), provider);
}
@Override
public Mono<? extends ProtocolSupport> load(ProtocolSupportDefinition definition) {
return Mono.justOrEmpty(this.providers.get(definition.getProvider()))
.switchIfEmpty(Mono.error(() -> new UnsupportedOperationException("unsupported provider:" + definition.getProvider())))
.flatMap((provider) -> provider.load(definition));
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(bean instanceof ProtocolSupportLoaderProvider){
if (bean instanceof ProtocolSupportLoaderProvider) {
register(((ProtocolSupportLoaderProvider) bean));
}
return bean;
}
}
}