Как создать несколько зависимых bean-компонентов для класса без использования XML файла? - PullRequest
0 голосов
/ 19 июня 2020

Я создал проект Spring с 2 классами моделей, один зависит от другого с @ Autowired.

Как я могу внедрить полностью созданный объект Son в класс John.

В настоящее время я получение нулевого значения для другого класса.

package com.example.demo;

import org.springframework.stereotype.Component;

@Component
public class Son {

    private String sonAge;

    public String getNewsName() {
        return sonAge;
    }

    public void setNewsName(String sonAge) {
        this.sonAge = sonAge;
    }

    @Override
    public String toString() {
        return "Son [sonAge=" + sonAge + "]";
    }

}


    package com.example.demo;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;

    @Component
    public class John {

        private Son son;

        public Son getSon() {
            return son;
        }
        @Autowired
        public void setSon(Son son) {
            this.son = son;
        }
        public John() {

        }
        @Override
        public String toString() {
            return "John [son=" + son + "]";
        }


}

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class NewTestDependApplication {



    public static void main(String[] args) {
        SpringApplication.run(NewTestDependApplication.class, args);

          ApplicationContext context = new AnnotationConfigApplicationContext(NewTestDependApplication.class); 
          John john = (John)context.getBean("john");
         System.out.println(john);


    }

}

Результат, который я получаю:"John [son = Son [sonAge = null]]" sonAge становится нулевым, как создать

Я хочу создать 10 различных объектов John с 10 различными объектами Son, все будут иметь разное значение. Я не хочу использовать XML или метод @Bean для создания объекта.

Я новичок в Концепции, так что позвольте мне немного расслабиться.

1 Ответ

0 голосов
/ 19 июня 2020

Если вы хотите указать Son возраст, который вы можете установить при инициализации поля: private String sonAge = "thousand";. Кроме этого, я не вижу другого варианта, если @Bean не нравится с вашей стороны.

Если вы хотите иметь несколько экземпляров, вам нужно будет использовать некоторые квалификаторы .

Вот пример:

@Configuration
public class SonConfig {

    @Bean
    @Qualifier("son1")
    public Son son1() {
        // Set what ever you like here
        final Son son = new Son();
        return son;
    }
}

Что затем может быть использовано в John с использованием квалификатора:

@Component
public class John {
    ...

    @Autowired
    @Qualifier("son1")
    public void setSon(final Son son) {
        this.son = son;
    }
    ...
}

Если вы делаете это не только для цель обучения Я бы предложил использовать какое-то решение для сохранения устойчивости или что-то подобное. Трудно сказать, не зная какого-либо варианта использования, но использование внедрения зависимостей для моделей обычно не помогает.

Надеюсь, это поможет.

...