Прототип бобов весны дает мне только один экземпляр класса - PullRequest
1 голос
/ 23 сентября 2019

Я сейчас учусь Spring boot.Как и в коде, я написал аннотацию области действия с прототипом bean.

@Component
@Scope(value = "prototype")
public class ninja {
    // constructor
    public ninja() {
        System.out.println("object created");
    }
}

Я ожидаю, что это позволит мне создавать несколько объектов всякий раз, когда я вызываю функцию getBean.

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {

        // creating first instance
        ninja obj = SpringApplication.run(DemoApplication.class, args).getBean(ninja.class);

        // creating second instance
        ninja obj1 = SpringApplication.run(DemoApplication.class, args).getBean(ninja.class);

    }

}

Но я получаю только один экземпляр после двухкратного вызова getBean (). Созданный объект - это текст, который печатает конструктор, он должен быть напечатан дважды.

enter image description here

Что мне здесь не хватает?Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2019

Вы в основном инициализируете приложение Spring дважды.Таким образом, вы будете получать различный контекст приложения каждый раз .Измените его, как показано ниже, и посмотрите на результат:

ApplicationContext context = SpringApplication.run(DemoApplication.class, args);

Ninja obj = getBean(Ninja.class);
Ninja obj1 = getBean(Ninja.class);

Примечание. Я изменил имя в соответствии с соглашением об именах Java и советую вам следовать тому же.

0 голосов
/ 23 сентября 2019

Прототип создаст другой объект, только если целевой объект, в который вы вводите, отличается.Поскольку вы дважды вводите один и тот же метод, вы получите один и тот же экземпляр.Попробуйте создать фабрику с прототипом и вместо этого внедрить эту фабрику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...