【问题标题】:How To Access Object From Spring Service如何从 Spring 服务访问对象
【发布时间】:2019-08-26 16:52:23
【问题描述】:

我对使用 Spring Boot 还很陌生,我使用 this tutorial 作为如何设置服务的指南。它非常好,但我不明白我最终如何从我的 Application.java 类中的 main 方法访问 countryArray 对象。有人可以解释一下吗?

【问题讨论】:

    标签: java spring spring-boot spring-mvc annotations


    【解决方案1】:

    如果我理解您的问题,目前您希望访问 countryArray 列表,该列表将由 Spring 服务的 init 方法填充,并且在 Spring 服务初始化后将填充此列表。我建议你应该有一个 public getter 方法可以让你读取对象。

    此外,在访问 getter 方法时,您不应使用 new class() 初始化服务类,而应使用 springcontext.getbean("nameofyourbean") 获取单例对象

    【讨论】:

      【解决方案2】:

      首先。不要使用@PostConstruct。这不是很可测试。 您可以实现 InitializingBean-Interface 并在那里初始化您的类。

      第二:构造函数注入是使您的代码可测试的好方法。 恕我直言,比@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;
          }
      }
      

      回答您的问题

      您不想在应用程序的主类中做某事。 如果您正在创建一个 Web 应用程序,那么您有正在调用服务方法的控制器(请参阅 spring-boot-starter-web);或者你可以有调度器(见 spring 调度器);调用其他服务或存储库的服务。 在那里,您可以像在 java 中一样访问方法/属性。

      如果您的应用程序是一个开始-做某事-停止的应用程序(不要取名为 atm)或者是一个基于 GUI 的应用程序,请过度考虑使用 spring。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2017-04-02
        相关资源
        最近更新 更多