यदि मैं एक साधारण स्प्रिंग बूट कंसोल-आधारित अनुप्रयोग विकसित कर रहा हूं, तो मैं मुख्य निष्पादन कोड की नियुक्ति के बारे में अनिश्चित हूं। मैं public static void main(String[] args)
विधि में रखें, या मुख्य आवेदन वर्ग CommandLineRunner
इंटरफ़ेस को लागू और run(String... args)
विधि में कोड होना चाहिए?स्प्रिंग बूट कंसोल आधारित एप्लिकेशन कैसे काम करता है?
मैं संदर्भ के रूप में एक उदाहरण का उपयोग करूंगा।
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 (इंटरफेस)
public interface GreeterService {
String greet(String[] tokens);
}
: मैं निम्नलिखित [अल्पविकसित] आवेदन (
इंटरफेस के लिए कोडित, स्प्रिंग शैली) है कहो
GreeterServiceImpl.java (कार्यान्वयन वर्ग)
@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
के बराबर स्प्रिंग बूट संस्करण पंक्तियों के साथ कुछ होगा: GreeterServiceImpl.java (कार्यान्वयन वर्ग)
@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?
}
}
उपयोग एक 'CommandLineRunner' वह यह है कि क्या है यह के लिए बनाया गया देखें, तो आप भी बना सकते हैं:
@jeton laters से पता चलता है Springboot एक सीधे लागू करता है इसका एक उदाहरण और इसमें निर्भरताएं शामिल हैं। यह आपके पहले परिदृश्य में असफल हो जाएगा क्योंकि आपके पास निर्भरता इंजेक्शन नहीं होगी या स्थिर विधि से इसे एक्सेस नहीं कर पाएगी। –
@ एम। डीनियम इस तरह के कंसोल-आधारित अनुप्रयोगों को कमांड के सामान्य नियम के रूप में कमांडलाइनर इंटरफ़ेस को कार्यान्वित करना होगा? यह मेरे लिए पर्याप्त स्पष्टता प्रदान करता है, क्योंकि दस्तावेज़ भी इस बिंदु पर ध्यान केंद्रित नहीं करते हैं (शायद क्योंकि यह ज्यादातर लोगों के लिए निहित है!)। –
वैसे आप आदर्श रूप से एक बीन बनाते हैं जो इस इंटरफेस को लागू करता है (और आपकी 'एप्लिकेशन' कक्षा नहीं)। इसे चिंताओं को अलग करने के साथ करना है (अपना आवेदन शुरू करना और अपना तर्क निष्पादित करना)। –