Заставляет ли автоматическая проводка конструктора Spring создавать хотя бы один экземпляр этого объекта? - PullRequest
0 голосов
/ 30 января 2020

Я смотрю на код, который назначает объект для ссылки * stati c с помощью автоматического подключения конструктора:

@Component
class MySpringClass {
  private static PaymentRepo paymentRepo;

  @Autowired
  MySpringClass(PaymentRepo repo) { MySpringClass.paymentRepo = repo; }

  static void usePaymentRepoToDoStuff() { …. using paymentRepo ….. }
}

Я читал, что не рекомендуется назначать ссылки stati c через autowiring. , Я этого не делал. Не мой код.

Я не могу найти место, где явно создан хотя бы один экземпляр MySpringClass (но это много кода). Этот код работает надежно.

Таким образом, @ Autowired заставляет Spring создать хотя бы один экземпляр MySpringClass , и, следовательно, конструктор для запуска, даже если он явно не указан называется в Java? В противном случае я буду продолжать искать и пытаться понять это. спасибо.

Ответы [ 2 ]

1 голос
/ 31 января 2020

Это зависит от того, сконфигурирован ли ваш Spring-контейнер с ленивой инициализацией bean-компонентов по умолчанию (по умолчанию это eager, а не lazy). Таким образом, по умолчанию Spring создает экземпляр компонента при создании контекста Spring. И поскольку вы используете Spring, вам не нужно проверять, использует ли код непосредственно конструктор, поскольку Spring создаст bean-компонент, и вы не должны создавать объекты, помеченные как bean-компоненты с помощью конструктора (это устраняет всю концепцию внедрения зависимостей и инверсии контроля).

В случае отложенной загрузки настроенный Spring будет создавать bean-компонент только тогда, когда это необходимо.

1 голос
/ 30 января 2020

@ Component , объявленный в классе, будет прочитан Spring и будет создан как Spring Bean (по умолчанию это будет Singleton, так что только один экземпляр) и он будет добавлен в контекст приложения Spring. Также вы можете использовать MySpringClass по всему приложению, если вы @ Autowired it.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/stereotype/Component.html

...