Dubbo
源
码
解
析
— filter
和
listener
前
言
有一
句
说
一
句
,
这
个
标
题
的
有
点
标
题
党的
意
思
,
我
们
在这
里
并不
想
给
大
家讲解
filter
和
listener
的
概
念
、
实
现
、
功
能
等等
。
而
是
想
给
大
家讲解
filter
和
listener
的
注
入
过
程
,
具
体
filter
和
listener
请
大
家
看
一
下
官
方
文
档
,
或
者
可
以
查
看
一
下
dubbo
已
知
扩
展
点的
实
现
。
问题
我
们
看
一
下消
费方
执
行
流
程
:
ReferenceBean --> ReferenceConfig --> RegistryProtocol --> DubboProtoco
l --> invoker --> exporter
好
像
每
一
个
环
节
都
没
有
filter
和
listener
的
使
用
。。。
我
们
还
是
回
忆一
下
dubbo
的
spi
机
制
,
dubbo
根
据
配
置
文
件
,
从
中
拿
到
对
应
的
扩
展
点
,
我
们
看
一
下
protocol
对
应
的
配
置
文
件
:
filter=com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper
listener=com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper
mock=com.alibaba.dubbo.rpc.support.MockProtocol
我
们
看
到
了
啥
?
看
到
了
ProtocolFilterWrapper
和
ProtocolListenerWrapper
这
两
个
包
装
类
,
这
两
个
即
为
filter
和
listener
的
扩
展
点
。
接
下
来看
一
下
它
们
是
怎
么
一
步
一
步
的
被
注
入
到
上
面
的
流
程
里
的
。
分
析
在
ReferenceConfig
类
中
我
们
会
引用
和
暴
露
对
应
的
服
务
,
我
们
以
服
务
引用
为
场
景
来
分
析
,
之
前
提
到
过
,
服
务
提
供
方
在
dubboNamespaceHandler
中
非
常
重
要
的
类
为
ServiceBean
,
对
应
<dubbo:service
... />
,
那
么
我
们
很
容
易
联
想
到
,
消
费方
的
就
是
ReferenceBean
,
看
一
下
这
个
类
的
afterPropertiesSet
方法
:
...
Boolean b = isInit();
if (b == null && getConsumer() != null) {
b = getConsumer().isInit();
}
if (b != null && b.booleanValue()) {
//注意这里!
getObject();
}