Что происходит, когда мы вызываем new Bean (), где Bean является синглтоном? - PullRequest
0 голосов
/ 01 июня 2018

Привет. Все это может быть повторяющимся вопросом, извините за это, но я не смог найти этот пост.

Вопрос: - Предположим, есть класс А, который был написан таким образом

  @Component
  public class A{}

Теперь, когда я вызову A a = new A () два раза, он предоставит мне один и тот же объект или нет?Это может быть глупый вопрос, но не могли бы вы уточнить его подробнее?

Спасибо,

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Во-первых, это пример класса Singleton, и вы не можете создать его с новым ключевым словом из-за пределов класса, потому что ваш конструктор является личным.

 class MySingleton
{
    static MySingleton instance = null;
    public int x = 10;

    // private constructor can't be accessed outside the class
    private MySingleton() {  }

    // Factory method to provide the users with instances
    static public MySingleton getInstance()
    {
        if (instance == null)        
             instance = new MySingleton();

        return instance;
    } 
}

Во-вторых, вы можете найти много информации в здесь о Бобе, и вам нужно создать бин с аннотацией @Bean, например.

Кроме того, вы можете посмотреть этот пост

0 голосов
/ 01 июня 2018

Когда вы вызываете A = new A() в вашем примере, вы всегда получаете новый экземпляр, потому что A не реализован как одноэлементный класс.

Тот факт, что он аннотирован как @Component, будет тольковоздействовать на этот класс, когда он создается в контексте весны, а переменная, созданная с помощью = new() (есть исключения, но можно обобщать), не находится в контексте весны.

Если вы хотите, чтобы всегда было то же самоеbean, вам следует создать экземпляр переменной "a" с помощью @Autowired следующим образом:

@Autowired
private A a;

Также обратите внимание, что @Autowired будет работать только в том случае, если текущий класс тоже находится в контексте весны (выне создавать его с a = new (...)).

...