All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.argo.service.beans.RpcServiceBeanFactoryPostProcessor Maven / Gradle / Ivy

The newest version!
package com.argo.service.beans;

import com.argo.annotation.RmiService;
import com.argo.service.RmiConfig;
import com.argo.service.ServiceNameBuilder;
import com.argo.service.impl.server.RmiServiceBeanManager;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.remoting.rmi.RmiServiceExporter;

/**
 * 在服务端.
 * 根据RmiService注解来注册服务
 * @author yaming_deng
 * 2013-1-11
 */
public class RpcServiceBeanFactoryPostProcessor extends ServiceBeanFactoryPostProcessor {

    @Override
	protected void postAddBean(DefaultListableBeanFactory dlbf, String beanName,
			Class clzz) {

        if (!RmiConfig.instance.isEnabled()){
            return;
        }

        Class[] types = clzz.getInterfaces();

        if (types.length == 0){
            return;
        }

        Class serviceInterface = types[0];

		RmiService annotation = serviceInterface.getAnnotation(RmiService.class);
		
		if(annotation==null){
			return;
		}

        String serviceName = ServiceNameBuilder.get(serviceInterface, annotation.servcieName());

		if (logger.isDebugEnabled()) {
			logger.debug("@@@wrapRmiService-postProcessBeanFactory0, beanName={}, serviceName={}", beanName, serviceName);
		}

		BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(RmiServiceExporter.class.getName());
		
		builder.addPropertyValue("serviceInterface", serviceInterface);
		builder.addPropertyReference("service", beanName);
		builder.addPropertyValue("serviceName", serviceName);
		builder.addPropertyValue("registryPort", annotation.port());
		builder.addPropertyValue("replaceExistingBinding", annotation.replaceExistingBinding());
		builder.addPropertyValue("alwaysCreateRegistry", annotation.alwaysCreateRegistry());
		
		dlbf.registerBeanDefinition(serviceName+"Proxy", builder.getBeanDefinition());

		// 加入管理
		RmiServiceBeanManager.add(beanName, serviceName);

		if (logger.isDebugEnabled()) {
			logger.debug("@@@wrapRmiService-postProcessBeanFactory1, beanName={}, serviceName={}", beanName, serviceName);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy