我是靠谱客的博主 无语豆芽,最近开发中收集的这篇文章主要介绍dubbo获取ApplicationContext,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

dubbo自定义的扩展中如何获取当前的ApplicationContext,并且获取对应的类和接口以及方法。


1.自定义扩展步骤

@在xml中,provider标签中加入filter="TEST";

@同时文件目录如下配置:

src
  |-main
     |-java
         |-com
             |-xxx
                 |-Test.java (实现Validation接口)
     |-resources
         |-META-INF
             |-dubbo
                 |-com.xxx.Test (纯文本文件,内容为:xxx=com.xxx.Test)

2.具体的实现

import java.lang.reflect.Method;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcContext;
import com.alibaba.dubbo.rpc.RpcException;
import com.sohu.service.TmallOrderService;

@Activate("TEST")
public class TestFilter implements Filter{
	
	private Logger logger =LoggerFactory.getLogger(TestFilter.class);

	
	@Override
	public Result invoke(Invoker<?> invoker, Invocation invocation)
			throws RpcException {
		logger.info("test filter");
		Class<?> serviceType = invoker.getInterface();
		
		Method method =null;
        try {
        	method= invoker.getInterface().getMethod(invocation.getMethodName(), invocation.getParameterTypes());
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        ApplicationContext context=ServiceBean.getSpringContext();
        TmallOrderService toc=context.getBean(TmallOrderService.class);
		logger.info(serviceType.getName());
		logger.info(method.getName());
        logger.info(toc.toString());
		return invoker.invoke(invocation);
	}

}

3.如何获取context呢

有个ServiceBean可以直接获取当前环境的springContext.


最后

以上就是无语豆芽为你收集整理的dubbo获取ApplicationContext的全部内容,希望文章能够帮你解决dubbo获取ApplicationContext所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部