Oldukça basit bir Spring Boot konsol tabanlı uygulama geliştiriyorsam, ana yürütme kodunun yerleştirilmesinden emin değilim. Ben public static void main(String[] args)
yönteminde yerleştirin veya ana uygulama sınıfı run(String... args)
yönteminde kod CommandLineRunner
arabirimini uygulamak ve yerleştirmek zorunda mıdır?Spring Boot konsol tabanlı uygulama nasıl çalışır?
metinlerde gibi bir örnek kullanılacaktır.
Application.java
public class Application {
@Autowired
private GreeterService greeterService;
public static void main(String[] args) {
// ******
// *** Where do I place the following line of code
// *** in a Spring Boot version of this application?
// ******
System.out.println(greeterService.greet(args));
}
}
GreeterService.java (arabirim)
public interface GreeterService {
String greet(String[] tokens);
}
: Aşağıdaki [ilkel] uygulaması (arayüzlere kodlanmış
, stil) olması demek
GreeterServiceImpl.java (uygulama sınıfı)
@Service
public class GreeterServiceImpl implements GreeterService {
public String greet(String[] tokens) {
String defaultMessage = "hello world";
if (args == null || args.length == 0) {
return defaultMessage;
}
StringBuilder message = new StringBuilder();
for (String token : tokens) {
if (token == null) continue;
message.append(token).append('-');
}
return message.length() > 0 ? message.toString() : defaultMessage;
}
}
Application.java
eşdeğer Bahar Boot versiyonu çizgisinde bir şey olurdu: GreeterServiceImpl.java (uygulama sınıfı)
@EnableAutoConfiguration
public class Application
// *** Should I bother to implement this interface for this simple app?
implements CommandLineRunner {
@Autowired
private GreeterService greeterService;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println(greeterService.greet(args)); // here?
}
// Only if I implement the CommandLineRunner interface...
public void run(String... args) throws Exception {
System.out.println(greeterService.greet(args)); // or here?
}
}
Kullanım bunun için tasarlanmış budur bir 'CommandLineRunner' Bkz oluşturabilirsiniz: @jeton Laters anlaşılacağı gibi
Springboot düz bir uygular bunun bir örneği ve ona bağımlılıklar enjekte etti. Bu, ilk senaryonuzda, bir bağımlılık enjekte etmeyeceğiniz veya statik yöntemden erişemeyeceğiniz için başarısız olur. –
@ M.Deinum, böylelikle konsol tabanlı uygulamalar CommandLineRunner arabirimini genel bir genel kural olarak uygulamalıdır? Bu benim için yeterli açıklığı sağlar, çünkü dokümanlar bile bu noktaya odaklanmaz (muhtemelen çoğu insan için gizli olduğu için!). –
İdeal olarak, bu arayüzü uygulayan bir fasulye yaratın (ve “Uygulama” sınıfınızı değil). Endişelerin ayrılmasıyla (uygulamanızı başlatırken ve mantığınızı yürütürken) yapmak zorundadır. –