title: Spring. Resolve circular dependency with java config and without @Autowired
body: <p>I've got circular dependency and java config. While resolving it with xml config is very easy I can't resolve it with java config without @Autowired. Beans:</p>
  
  <pre><code>public class A {
      private B b;
  
      public B getB() {
          return b;
      }
  
      public void setB(B b) {
          this.b = b;
      }
  }
  
  public class B {
      private A a;
  
      public A getA() {
          return a;
      }
  
      public void setA(A a) {
          this.a = a;
      }
  }
  </code></pre>
  
  <p>I've tried this(I've read that with @Bean annotation Spring won't invoke method every time bean is referenced, but in this case it's actually been invoked all the time):</p>
  
  <pre><code>@Configuration
  public class Config {
      @Bean
      public A a() {
          A a = new A();
          a.setB(b());
          return a;
      }
  
      @Bean
      public B b() {
          B b = new B();
          b.setA(a());
          return b;
      }
  }
  </code></pre>
  
  <p>And this, with @Autowired of Configuration class fields:</p>
  
  <pre><code>@Configuration
  public class Config {
      @Autowired
      A a;
      @Autowired
      B b;
  
      @Bean
      public A a() {
          A a = new A();
          a.setB(b);
          return a;
      }
  
      @Bean
      public B b() {
          B b = new B();
          b.setA(a);
          return b;
      }
  }
  </code></pre>
  
  <p>Also I've tried all above with @Lazy annotation. Doesn't help. But works perfectly if I annotate setters of A and B with @Autowired. But it's not what I want right now. What am I doing wrong and is there any way to resolve Circular dependency in java config without usage of @Autowired?</p>