Как получить доступ к объекту из службы Spring

#java #spring #spring-boot #spring-mvc #annotations

#java #spring #spring-boot #spring-mvc #аннотации

Вопрос:

Я довольно новичок в использовании Spring Boot, и я использую это руководство в качестве руководства по настройке службы. И это довольно хорошо, но я не понимаю, как я в конечном итоге получаю доступ к объекту countryArray из метода main в моем приложении.класс Java. Не мог бы кто-нибудь объяснить, пожалуйста?

Ответ №1:

Если я понял ваш вопрос, в настоящее время вы хотите получить доступ к списку countryArray, который будет заполнен методом init вашего Spring service, и этот список будет заполнен после инициализации Spring service. Я полагаю, у вас должен быть общедоступный метод получения, который позволит вам прочитать объект.

Кроме того, при доступе к методу getter вам не следует инициализировать свой класс сервиса с помощью new class(), а вместо этого получить одноэлементный объект с помощью springcontext.getbean("nameofyourbean")

Ответ №2:

Прежде всего. Не используйте @PostConstruct. Это не очень проверяемо. Вы могли бы реализовать интерфейс InitializingBean и инициализировать там свой класс.

Второе: внедрение конструктора — это хороший способ сделать ваш код тестируемым. ИМХО лучше, чем @Autowired. Возможно и то, и другое. Это скорее дело вкуса 😉

В качестве альтернативы вы могли бы создать класс @Configuration, который создает @Bean с именем. Например.:

 @Configuration
public class CountryConfig {
  @Bean(name = "countries")
  public Collection<Country> countries() {
    List<Country> countries = new ArrayList<>();
    // add countries here or load from repository
    return countries;
  }
}


@Service
public class CountryService {

    private final Collection<Country> countries;

    public CountryService(@Qualifier("countries") Collection<Country> countries) {
      this.countries = countries;
    }
}
  

Чтобы ответить на ваш вопрос

Вы не хотите что-то делать в основном классе вашего приложения. Если вы создаете веб-приложение, у вас есть контроллеры, которые вызывают методы службы (см. spring-boot-starter-web); или у вас могут быть планировщики (см. Spring schedulers); службы, которые вызывают другие службы или репозитории. Там вы можете получить доступ к методам / свойствам, к которым вы привыкли в Java.

Если ваше приложение представляет собой приложение для запуска, выполнения чего-либо и остановки (не указывайте имя atm) или приложение на основе графического интерфейса, продумайте использование spring.