【发布时间】:2019-08-26 16:52:23
【问题描述】:
我对使用 Spring Boot 还很陌生,我使用 this tutorial 作为如何设置服务的指南。它非常好,但我不明白我最终如何从我的 Application.java 类中的 main 方法访问 countryArray 对象。有人可以解释一下吗?
【问题讨论】:
标签: java spring spring-boot spring-mvc annotations
我对使用 Spring Boot 还很陌生,我使用 this tutorial 作为如何设置服务的指南。它非常好,但我不明白我最终如何从我的 Application.java 类中的 main 方法访问 countryArray 对象。有人可以解释一下吗?
【问题讨论】:
标签: java spring spring-boot spring-mvc annotations
如果我理解您的问题,目前您希望访问 countryArray 列表,该列表将由 Spring 服务的 init 方法填充,并且在 Spring 服务初始化后将填充此列表。我建议你应该有一个 public getter 方法可以让你读取对象。
此外,在访问 getter 方法时,您不应使用 new class() 初始化服务类,而应使用 springcontext.getbean("nameofyourbean") 获取单例对象
【讨论】:
首先。不要使用@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。
【讨论】: