当前位置: 代码迷 >> 综合 >> dubbo filter中无法使用@Autowired
  详细解决方案

dubbo filter中无法使用@Autowired

热度:88   发布时间:2023-12-06 09:40:43.0

先说结论:在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();
  相关解决方案