Commit 8f6f4a7b by huangfusuper

Netty客户端启动类修改

parent a8f2d061
package com.byit.factory;
import com.byit.client.NettyPluginClient;
import com.byit.client.PluginClient;
import com.byit.executor.handler.interfaces.IJobHandler;
import com.byit.init.PluginClientInitialization;
import com.byit.registry.DataSourceServiceRegistry;
import com.byit.registry.PluginServiceRegistry;
import com.byit.rpc.remoting.invoker.route.LoadBalance;
import com.byit.task.annotations.TaskClient;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter;
import org.springframework.util.ReflectionUtils;
/**
* spring 方式实现的插件端 客户端 实现工厂
* @author huangfu
*/
public class PluginSpringClientFactory extends InstantiationAwareBeanPostProcessorAdapter implements InitializingBean, DisposableBean, BeanFactoryAware {
private PluginClientFactory pluginClientFactory;
private Class<? extends PluginServiceRegistry> pluginServiceRegistryClass;
private Class<? extends PluginClient> pluginClientClass;
@Value("${myth.register.url}")
private String registryUrl;
@Value("${myth.plugin.env}")
private String env;
@Value("${myth.plugin.biz}")
private String biz;
public PluginSpringClientFactory( Class<? extends PluginServiceRegistry> pluginServiceRegistryClass, Class<? extends PluginClient> pluginClientClass) {
this.pluginServiceRegistryClass = pluginServiceRegistryClass;
this.pluginClientClass = pluginClientClass;
if (this.pluginServiceRegistryClass == null) {
this.pluginServiceRegistryClass = DataSourceServiceRegistry.class;
}
if (this.pluginClientClass == null) {
this.pluginClientClass = NettyPluginClient.class;
}
}
public PluginSpringClientFactory(Class<? extends PluginServiceRegistry> pluginServiceRegistryClass,
String registryUrl, String env, String biz, Class<? extends PluginClient> pluginClientClass) { ;
this.pluginServiceRegistryClass = pluginServiceRegistryClass;
this.registryUrl = registryUrl;
this.env = env;
this.biz = biz;
this.pluginClientClass = pluginClientClass;
if (this.pluginServiceRegistryClass == null) {
this.pluginServiceRegistryClass = DataSourceServiceRegistry.class;
}
if (this.pluginClientClass == null) {
this.pluginClientClass = NettyPluginClient.class;
}
}
/**
* 属性设置之后调用
* @throws Exception
*/
@Override
public void afterPropertiesSet() throws Exception {
pluginClientFactory = new PluginClientFactory(pluginServiceRegistryClass,registryUrl,biz,env);
pluginClientFactory.start();
}
/**
* bean进行实例化后的后期处理 能够拿到每一个bean的实例 插手bean的实例化后的属性注入
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public boolean postProcessAfterInstantiation(final Object bean, final String beanName) throws BeansException {
Class<?> beanClass = bean.getClass();
//寻找bean中每一个带有注解的操作 对其进行代理
ReflectionUtils.doWithFields(beanClass,field -> {
if (field.isAnnotationPresent(TaskClient.class)) {
//获取改属性的接口
Class<?> iFace = field.getType();
if (!iFace.isInterface()) {
throw new RuntimeException("该服务属性必须是接口类型的!");
}
TaskClient taskClientAnn = field.getAnnotation(TaskClient.class);
String callbackUrl = taskClientAnn.callbackUrl();
LoadBalance loadBalance = taskClientAnn.loadBalance();
long timeout = taskClientAnn.timeout();
PluginClientInitialization pluginClientInitialization =
new PluginClientInitialization(callbackUrl, timeout, loadBalance,
pluginClientFactory, iFace,pluginClientClass);
Object proxyObject = pluginClientInitialization.getObject();
field.setAccessible(true);
field.set(bean,proxyObject);
}
});
return super.postProcessAfterInstantiation(bean,beanName);
}
/**
* 能够获取bean工厂
* @param beanFactory
* @throws BeansException
*/
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
}
/**
* bean被销毁时 自动调用
* @throws Exception
*/
@Override
public void destroy() throws Exception {
pluginClientFactory.close();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment