Spring. Resolve circular dependency with java config and without @Autowired

后端 未结 3 750
一生所求
一生所求 2021-02-13 12:25

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:

pu         


        
3条回答
  •  借酒劲吻你
    2021-02-13 12:50

    I want to add another possible solution for your code. Instead of setting circular dependencies right in the config:

    @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;
        }
    }
    

    You could also let the spring do the work with the power of @Autowired annotation.

    @Configuration
    public class Config {
        @Bean
        public A a() {
            A a = new A();
            return a;
        }
    
        @Bean
        public B b() {
            B b = new B();
            return b;
        }
    }
    
    public class A {
        private B b;
    
        @Autowired
        public setB(B b) { this.b = b; }
    }
    
    public class B {
        private A a;
    
        @Autowired
        public setA(A a) { this.a = a; }
    }
    

    Of course it is non trivial from the "clean/readable/understandable" point of view because now your configuration is mixed in @Configuration and class itself. But as circular dependencies are quite rare, we could afford the hack.

提交回复
热议问题