package com.yiqiniu.easytrans.rpc; import java.util.HashMap; import java.util.List; import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.Resource; import com.yiqiniu.easytrans.filter.EasyTransFilterChainFactory; import com.yiqiniu.easytrans.protocol.BusinessIdentifer; import com.yiqiniu.easytrans.protocol.BusinessProvider; import com.yiqiniu.easytrans.protocol.EasyTransRequest; import com.yiqiniu.easytrans.protocol.RpcBusinessProvider; import com.yiqiniu.easytrans.provider.factory.ListableProviderFactory; import com.yiqiniu.easytrans.util.ReflectUtil; public class EasyTransRpcProviderInitializer { @Resource private EasyTransFilterChainFactory filterFactory; @Resource private EasyTransRpcProvider rpcProvider; @Resource private ListableProviderFactory wareHouse; @SuppressWarnings("unchecked") @PostConstruct private void init(){ //set filters rpcProvider.addEasyTransFilter(filterFactory.getDefaultFilters());; Set<Class<?>> typeSet = wareHouse.getServiceTransactionTypeSet(RpcBusinessProvider.class); //start services for(Class<?> transcationType:typeSet){ List<Object> services = wareHouse.getServices(RpcBusinessProvider.class, transcationType); HashMap<BusinessIdentifer,RpcBusinessProvider<?>> map = new HashMap<BusinessIdentifer, RpcBusinessProvider<?>>(services.size()); for(Object serviceObject:services){ RpcBusinessProvider<?> provider = (RpcBusinessProvider<?>) serviceObject; Class<? extends EasyTransRequest<?, ?>> requestClass = ReflectUtil.getRequestClass((Class<? extends BusinessProvider<?>>) provider.getClass()); BusinessIdentifer businessIdentifer = ReflectUtil.getBusinessIdentifer(requestClass); map.put(businessIdentifer, provider); } rpcProvider.startService(transcationType, map); } } }