Spring发布Hessian服务(最便捷的方法)

1、生成一个标识,自定义如下注解;

@Target({ java.lang.annotation.ElementType.TYPE })  
@Retention(RetentionPolicy.RUNTIME)  
@Documented  
@Service
public @interface HessianService {

	public abstract String value() default "";
}

2、定义扫描类;

@Component
public class HessianServiceScanner implements BeanFactoryPostProcessor {

	@Override
	public void postProcessBeanFactory(
			ConfigurableListableBeanFactory beanFactory) throws BeansException {
		
		String[] beanNames = beanFactory.getBeanDefinitionNames();
		for (String beanName : beanNames) {
			String className = beanFactory.getBeanDefinition(beanName)
					.getBeanClassName();
			Class<?> clazz = null;
			try {
				clazz = Class.forName(className);
			} catch (ClassNotFoundException e) {
				throw new BeanInitializationException(e.getMessage(), e);
			}

			HessianService an = clazz.getAnnotation(HessianService.class);

			if (null == an)
				continue;
			String hessianServiceBeanName = "/" + beanName;
			// 关键一步 : 发布到HessianServiceExporter服务
			BeanDefinitionBuilder builder = BeanDefinitionBuilder
					.rootBeanDefinition(HessianServiceExporter.class);
			builder.addPropertyReference("service", beanName);
			builder.addPropertyValue("serviceInterface",
					clazz.getInterfaces()[0].getName());
			((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(
					hessianServiceBeanName, builder.getBeanDefinition());
		}
	}

}

3、给服务类添加标识;

@HessianService("/hessian")
public class HessianImpl implements IHessian {

	@Override
	public String hessianMethod() {
		return "Hessian";
	}

}

That's OK!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值