Java Spring вложенный бин - PullRequest
       9

Java Spring вложенный бин

0 голосов
/ 26 октября 2018

Создан бин myLoaders и автонастройка.после этого кода вызывается loading, который внутренне вызывает функцию h().когда вызывается функция h(), проверяются a и a1, и оба они появляются как null.

Хотя a и a1 переданы и с автопроводкой , не уверен, почему это происходит как null.

package nestedbean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

    @Autowired
    Loaders myLoaders;

    @Bean
    public A a(){
        return new A(b());
    }

    @Bean
    public A1 a1(){
        return new A1();
    }

    @Bean
    public B b(){
        return new B(c());
    }

    @Bean
    public C c(){return new C();}

    @Bean
    public History history(){
        return  new History(a(), a1());
    }

    @Bean
    public Loaders myLoaders() {
        return new MyLoaders( history());
    }
    @Bean
    public Void load () throws Exception {
        myLoaders.loading();
        return null ;
    }

    static class History{
        A a ;
        A1 a1 ;

        @Autowired
        public History(A a , A1 a1 ) {
            a = a ; a1 = a1 ;
        }
        public void h(){ //when this function is called a and a1 both are null
            a1.test();
        }
    }

    static class MyLoaders implements Loaders {
        public History h ;
        @Autowired C c;

        @Autowired
        public MyLoaders(History history ){ h= history ;}
        public void loading(){
            System.out.println("loading");
            h.h();

        }
    }


    static class A {
       B b;
       public A(B b){ this.b = b ;}
    }

    static class A1 {
        @Autowired
        C c;

        B b;
        public void test(){
            System.out.println("testing");
        }
    }
    static class B{        C c;
        public B(C c){ c = c ;}
    }
    static class C {            }

    public interface Loaders {
        final String mystring = "4";
        public void loading();
    }


}

Может кто-нибудь, пожалуйста, проверьте.Если вы можете предоставить некоторые ссылки, которые были бы действительно полезны.

спасибо

1 Ответ

0 голосов
/ 26 октября 2018

Ваш конструктор не устанавливает поля, вы забыли ключевое слово "this" для ссылки на ваш экземпляр. Попробуйте с этим конструктором:

        @Autowired
        public History(A a , A1 a1 ) {
            this.a = a ; this.a1 = a1 ;
        }
...