Am I missing something here? This occurs in 3.0.x and 3.1.x.

Base providing Config
Code:
  @Configuration
  class FooConfig {
    @Bean
    String foo() {
      return "foo";
    }

    @Bean
    String baz() {
      return "baz";
    }
  }
Various cases paired with above base config
Code:
  @Configuration
  class Case0Config {
    @Autowired
    String foo2;

    @Bean
    String foobar() {
      return foo2 + "bar";
    }
  }
  
  @Configuration
  class Case1Config {
    @Autowired
    String foo;

    @Bean
    String foobar() {
      return foo + "bar";
    }
  }
  
  @Configuration
  class Case2Config {
    @Autowired 
    @Qualifier("foo")
    String foo;
    
    @Bean
    String foobar() {
      return foo + "bar";
    }
  }
  
  @Configuration
  class Case3Config {
    @Bean
    String foobar(String foo) {
      return foo + "bar";
    }
  }
Runner
Code:
 public static void main(String[] args) {
    // new AnnotationConfigApplicationContext(FooConfig.class, Case0Config.class);
    // above will fail as expected since field name is different
    
    ApplicationContext c1 = new AnnotationConfigApplicationContext(FooConfig.class, Case1Config.class);
    System.out.println(c1.getBean("foobar")); 
    // nullbar  <- the inconsistency
    
    ApplicationContext c2 = new AnnotationConfigApplicationContext(FooConfig.class, Case2Config.class);
    System.out.println(c2.getBean("foobar"));
    // foobar
    
    ApplicationContext c3 = new AnnotationConfigApplicationContext(FooConfig.class, Case3Config.class);
    System.out.println(c3.getBean("foobar")); 
    // foobar
  }