package net.dubboclub.dubbogenerator.reference; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; import java.util.List; import java.util.concurrent.atomic.AtomicLong; /** * Created by bieber on 2015/8/7. */ public class InitializingFacade implements InitializingBean,BeanFactoryAware{ private List<Class<?>> clientClassList; private DefaultListableBeanFactory beanFactory; private AtomicLong facadeBeanCount = new AtomicLong(0); @Override public void afterPropertiesSet() throws Exception { if(clientClassList!=null&&clientClassList.size()>0){ for(Class<?> clientType:clientClassList){ DubboClientWrapper.getWrapper(clientType); registerSpringBean(clientType); } } } private void registerSpringBean(Class<?> type){ RootBeanDefinition definition = new RootBeanDefinition(); definition.setBeanClass(ClientFactory.class); definition.setScope(BeanDefinition.SCOPE_SINGLETON); definition.setLazyInit(false); definition.getPropertyValues().addPropertyValue("type",type); beanFactory.registerBeanDefinition(type.getName(),definition); } public void setClientClassList(List<Class<?>> clientClassList) { this.clientClassList = clientClassList; } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = (DefaultListableBeanFactory) beanFactory; } }