您的位置:首页 > 移动开发

dubbo获取ApplicationContext

2015-12-11 16:49 387 查看
dubbo自定义的扩展中如何获取当前的ApplicationContext,并且获取对应的类和接口以及方法。

1.自定义扩展步骤

@在xml中,provider标签中加入filter="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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: