Каковы различия между @PostConstruct и Autowired Constructor? - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы знать, в чем различия между двумя примерами ниже. Один из них использует метод инициализации @PostConstruct, чтобы гарантировать инициализацию bean-компонента с автосвязью, а другой использует конструктор с @Autowired, чтобы обеспечить инициализацию всех необходимых bean-компонентов.

Мне любопытно

  1. Если есть какие-то функциональные различия
  2. Если одно лучше другого, почему? (Может быть скорость инициализации, меньше стек вызовов, меньше использования памяти и т. Д. c.)

Заранее спасибо:)

@Component
public class MyBean {

    @Autowired
    public MyBean(SomeOtherBean someOtherBean) {
        ...
    }
    ...
}
@Component
public class MyBean {

    @Autowired 
    private SomeOtherBean someOtherBean;

    @PostConstruct
    public void init() {
        ...
    }
    ...
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

в первом случае, если я собираюсь использовать MyBean.class без в рамках ни одного фреймворка Spring, мне нужно будет передать SomeOtherBean, чтобы я знал, что объект создан правильно. но во втором случае я бы сделал новый MyBean (), а затем, после его использования, получу исключение NullPointerException, потому что объект зависит от SomeOtherBean. поэтому первый намного чище.

0 голосов
/ 18 апреля 2020

Конструктор с автопроводкой не создаст экземпляр, если у него не будет доступного someotherbean, это означает, что он быстро завершится неудачей и даже не будет пытаться создать экземпляр до того, как будет доступен someotherbean. Если у вас нет конструктора с автопроводкой, он создаст экземпляр, и компонент будет доступен в контейнере, а затем внедрит someotherbean, когда он станет доступен. Все, что находится внутри аннотированного метода @PostConstruct, будет выполняться после создания экземпляра. Пожалуйста, прочитайте следующее, чтобы получить лучшую идею

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring -кор

...