如何替换 ConditionalOnMissingBean bean?

问题描述

我使用一个包含

的库
public class MyFilter extends FilterParent { ... }

@Configuration
public class AutoConf
{
    @Bean
    @ConditionalOnMissingBean(FilterParent.class)
    public MyFilter myFilter ()
    {
        return new MyFilter (); //               <------- I want to replace this
    }
}

正确加载。我无法更改此库,但我想加载不同的过滤器

我试过了

@Component
public class MyNewFilter extends MyFilter { ... }

修改应用类

@SpringBootApplication
public class Application
{
    public static void main (String[] args)
    {
        SpringApplication.run (Application.class,args);
    }

    @Bean
    public CommandLineRunner commandLineRunner (ApplicationContext ctx)
    {
        return args -> {
            // startup code
        };
    }

    @Bean
    public MyFilter myFilter ()
    {
        return new MyNewFilter (); //          <----------- THIS IS NEW
    }
}

但我仍然加载了 MyFilter 而不是 MyNewFilter

如何在不更改 MyNewFilter 的情况下加载 MyFilter bean 而不是 AutoConf 加载的 AutoConf bean?

解决方法

试试这个。

@SpringBootApplication
public class Application
{
  public static void main (String[] args)
  {
    SpringApplication.run (Application.class,args);
  }

  @Bean
  public CommandLineRunner commandLineRunner (ApplicationContext ctx)
  {
    return args -> {
        // startup code
    };
  }

  @Bean
  public MyNewFilter myFilter ()
  {
    return new MyNewFilter (); //          <----------- THIS IS NEW
  }
}
,

@chrylis-cautiouslyoptimistic- 是正确的,正在加载新组件。由于无关的原因,应用程序行为异常。

我无法删除帖子,所以我会在 2 天内接受。