2016-08-14 14 views
5

Jestem w trakcie przekształcania prostego projektu java w wariant wiosennego rozruchu. Poradnik Spring Boot Reference Guide http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ jest bardzo pomocny, ale większość przykładów konfiguracji prostej konfiguracji dotyczy niektórych aplikacji internetowych. Samouczek wprowadzający z samouczka https://spring.io/guides/gs/spring-boot/ nie zapewnia odpowiedzi, której szukam.Jaki jest oficjalny sposób rozruchu wiosennego, aby uruchomić prostą, opartą na przeglądarce internetowej aplikację java?

Mam jedną klasę HelloSpring, że muszę uruchomić jedną metodę na printHello(). Mam skonfigurowane następujące klasy, umieszczony w tym samym opakowaniu dla uproszczenia:

Application.class

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

HelloConfiguration.class

@Configuration 
public class HelloConfiguration { 

    @Bean 
    public HelloSpring helloSpring(){ 
     HelloSpring hs = new HelloSpring(); 
     hs.printHello(); 
     hs.printHelloAgain(); 
     return hs; 
    } 

    @Autowired 
    public HelloSpring hs; 

} 

HelloSpring.class

public class HelloSpring { 

    public void printHello() { 
     System.out.println("Hello Spring!"); 
    } 

    @PostConstruct 
    public void printHelloAgain() { 
     System.out.println("Hello Spring?"); 
    } 

} 

Drukuje (rejestrowanie sprężyny pominięta):

Hello Spring! 
Hello Spring? 
Hello Spring? 

Jestem jednak pewien prawidłowego sposobu realizacji moją klasę HelloSpring.

Na powyższym przykładzie, jaki jest oficjalny sposób połączenia i "uruchomienia" klasy podczas korzystania z rozruchu wiosennego?

+0

Czy mogę zapytać, które funkcje wiosennego rozruchu chcesz użyć w swojej aplikacji spoza sieci? Jak zauważyłeś, Boot koncentruje się głównie na Internecie, więc jest to bardzo słabe dopasowanie IMO. – mszymborski

+0

Głównie użycie adnotacji właściwości sprężyny, możliwość zalogowania aplikacji za pomocą wiosennego serwera startowego, dodanie transakcji bazy danych bez konieczności konfigurowania dużej ilości i możliwość użycia zestawu wstępnie zdefiniowanych ustawień/konfiguracji (rozruch w trybie wiosennym zajmuje poglądowy pogląd platforma Spring) –

+0

@mszymborski Powiedziałbym, że Spring Boot jest dużo mniej skoncentrowany na sieci niż tradycyjny Spring Framework. Jeśli wyewidencjonujesz http: //start.spring.io/zobaczysz, że Web to tylko jeden wybór zależności od miriadu wyborów. –

Odpowiedz

5

Po prostu użyj ApplicationContext, który zwraca SpringApplication.run, a następnie z tym pracuj. To dość dużo wszystko, co jest wymagane

public static void main(String[] args) { 
    ApplicationContext context = SpringApplication.run(Application.class, args); 
    HelloSpring bean = context.getBean(HelloSpring.class); 
    bean.printHello(); 
} 

Więc można otworzyć GUI itp i wykorzystać ApplicationContext aby uzyskać fasola itp

+0

Prosty i prosty, bardzo dziękuję za szybką odpowiedź, działa jak urok. –

+0

Korzystanie z kontekstu bezpośrednio nie nadaje się dobrze do korzystania z możliwości Spring Boot. To, co pierwotnie pisano, było bliższe wykorzystaniu możliwości. Wkrótce udzielam odpowiedzi na przykładzie. –

3

Od docs: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-command-line-runner

Application. Klasa

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

HelloSpring.class

@Component 
public class HelloSpring implements CommandLineRunner { 
    @Override 
    public void run(String... args) { 
     this.printHello(); 
    } 

    public void printHello() { 
     System.out.println("Hello Spring!"); 
    } 
} 

Można nawet zrobić to więc metoda run() faktycznie wypisze cię wiadomość, ale w ten sposób utrzymuje je bliżej intencyjny, w którym wprowadziliśmy metodę i ma on wykonany po uruchomieniu aplikacji.

+0

Bardzo czysty również, dziękuję. Czy istnieje korzyść z zastosowania tego podejścia powyżej podejścia do korzystania z komponentu bean i pobierania komponentu z kontekstu aplikacji? Innymi słowy, czy muszę używać fasoli w moim prostym scenariuszu? –

+1

Fasola jest tym, co Spring łączy ze sobą. Nawet w moim przykładzie HelloSpring staje się Groszkiem. Spring właśnie zna metodę 'run()' ze względu na to, że skanuje ona wszystkie komponenty bean dla każdego, który implementuje 'CommandLineRunner'. Jak już wspomniałem w moim komentarzu do drugiej odpowiedzi, najlepiej jest pozostawić interakcję z 'ApplicationContext' do Spring, a zamiast tego użyć adnotacji/interfejsów, wtedy będziesz miał większą elastyczność. –

+0

Chociaż zgadzam się, że jest to dobre rozwiązanie, nie zgadzam się z tym, że obsługa kontekstu jest sama w sobie zła. To zależy od twojego rozwiązania, musisz efektywnie zarządzać całą aplikacją jak Spring, podczas gdy z kontekstowym rozwiązaniem możesz zachować część aplikacji poza Spring i po prostu użyć jej tam, gdzie chcesz. To, co jest preferowane, zależy od zastosowania i zastosowania. –

Powiązane problemy