dubbo filter中无法使用@Autowired

先说结论:在dubbo的拦截器中,使用@Autowired自动注入是无效的

你写的bug应该是这样的:

public class ConsumerFilter implements Filter{
@Autowired
private FilterProperties filterProperties;
……
}

解决方法1:

使用set方法注入,这种方式目前在一定条件下可以获取到目标Bean,dubbo在通过SPI加载Filter时,会通过SpringExtensionFactory在spring的ApplicationContext中查找通过set方法注入的Bean,因此只要持有ApplicationContext并且ApplicationContext中有目标Bean,就可以通过该方式获取到。
前提条件:dubbo 服务是通过注解的方式暴露和引用,即保证SpringExtensionFactory能提前有ApplicationContext

private FilterProperties filterProperties;

public void setFilterProperties(FilterProperties filterProperties) {  
    this.filterProperties = filterProperties;  
}  

解决方法2:

private static ApplicationContext context;
FilterProperties filterProperties = context.getBean(FilterProperties.class);

解决方法3:

@ConfiguationProperties
@Data
public class FilterProperties {

private static FilterProperties instance;

@PostConstruct
public void init() { instance = this; }

public static FilterProperties getInstance() {
	return instance == null ? new FilterProperties() : instance;
}

private boolean apple = false;

}
FilterProperties.getInstance().isApple();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值