如何从Spring Service访问对象

时间:2019-04-04 20:21:13

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

我刚开始使用Spring Boot,并且正在使用this tutorial作为如何设置服务的指南。很好,但是我不明白我最终如何从Application.java类的main方法访问countryArray对象。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

首先。不要使用@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);或者您可以拥有调度程序(请参阅春季调度程序);调用其他服务或存储库的服务。 在那里,您可以像在Java中一样访问方法/属性。

如果您的应用程序是一个起步就停止的应用程序(名称不为atm),或者是基于GUI的应用程序,请考虑使用spring。

答案 1 :(得分:1)

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

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

获取单例对象