今天在写dubbo的filter时候,需要注入bean和读取配置文件,然后理所当然的就像springboot其他地方的写法一样,直接用了@Resource和@Value注解。但是本地调试的时候,发现报错,注入的bean和读取的配置变量全部为null,很是不解,于是就上网查了以下资料。
首先,dubbo的拦截器这些组件是由dubbo自己管理的,并不是直接由spring管理的,因此spring的那些注入注解在dubbo里统统不能用。
如果想用可以采取以下代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12private Environment environment; public void setEnvironment(Environment environment){ this.environment=environment; } @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { String headerTopic = environment.getProperty("spring.kafka.header-topic"); Result result = invoker.invoke(invocation); return result; }
这样就可以读取到配置文件了。如果想要注入bean,则使用以下代码:
复制代码
1
2
3
4
5private KafkaTemplate<String, String> headKafkaTemplate; public void setHeadKafkaTemplate(KafkaTemplate<String, String> headKafkaTemplate){ this.headKafkaTemplate = headKafkaTemplate; }
dubbo组件实例化后,setter方法会被dubbo调起,然后在ApplicationContext中去查找对应的bean。而且在查找的过程中是优先按照名字去匹配,然后才是type,所以尽量把setter方法名字写成要注入的bean的名字。
以上参考博客为:
Dubbo初始化源码解析
dubbo读取配置文件
dubbo注入bean其他方法
java中的filter注入bean
最后
以上就是朴实钻石最近收集整理的关于dubbo filter中有关bean注入和配置文件读取的问题的全部内容,更多相关dubbo内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复