Spring Framework 5.2 has introduced an optimization for @Configuration class processing that can be enabled via an attribute @Configuration(proxyBeanMethods = false).

If you disable proxyBeanMethods the proxy instances are no longer created and calling the method invokes it again (returning a new instance every time). As a result, you have no guarantee that you're actually injecting the corresponding bean in the context.

Incorrect bean method call example:

@Configuration(proxyBeanMethods = false)
class TestConfiguration {
  @Bean
  public FirstBean firstBean() {
    return new FirstBean();
  }

  @Bean
  public SecondBean secondBean() {
    return new SecondBean(firstBean()); // -> incorrect call
  }
}


You can set proxyBeanMethods to true or rewrite the code as follows:

@Configuration(proxyBeanMethods = false)
class TestConfiguration {
  @Bean
  public FirstBean firstBean() {
    return new FirstBean();
  }

  @Bean
  public SecondBean secondBean(FirstBean someBean) { // -> correct injected instance
    return new SecondBean(someBean);
  }
}


Also, the inspection checks @Bean method calls in a class without the @Configuration stereotype (in "bean lite mode"):

@Component
class TestComponent {
  @Bean
  public FirstBean firstBean() {
    return new FirstBean();
  }

  @Bean
  public SecondBean secondBean() {
    return new SecondBean(firstBean()); // -> incorrect call
  }
}