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