2016-08-14 5 views
5

私は、単純なJavaプロジェクトを春のブート・バリアントに変換しています。 Springブートリファレンスガイドhttp://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/は一般的に非常に役に立ちましたが、単純な設定を行うほとんどの例には、Webベースのアプリケーションがいくつか含まれています。 https://spring.io/guides/gs/spring-boot/チュートリアルの初心者チュートリアルでは、私が探している答えはありません。単純な非ウェブベースのJavaアプリケーションを起動するための正式なスプリングブート方法は何ですか?

HelloSpring私はprintHello()で1つのメソッドを実行する必要があるクラスを1つ持っています。

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

Application.class

@SpringBootApplication 
public class Application { 

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

} 

:私は簡単にするため、同じパッケージに置かれ、次のクラスを設定しています

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

それは(春ロギングは省略)出力します。

Hello Spring! 
Hello Spring? 
Hello Spring? 

しかし、私は私のHelloSpringクラスを実行するための正しい方法がわからないと思います。

上記の例では、スプリングブートを使用するときにクラスを配線して実行する公式の方法は何ですか?

+0

Web以外のアプリケーションで使用するSpringブートの機能を尋ねることはできますか?あなたが気づいたように、Bootは主にWebに焦点を当てているので、これはかなり劣悪なものです。 – mszymborski

+0

ほとんどの場合、バネプロパティの注釈を使用して、春のブート管理を使用してアプリケーションをログに記録できるようになり、多くのデータベーストランザクションを追加することなく、事前定義された設定/構成のセットを使用できるようになります。 Springのプラットフォーム) –

+0

@mszymborski私は、Springのブートは、伝統的なSpring Frameworkプロジェクトよりも、Webの方が実際にはあまり集中していないと言います。 http://start.springをチェックしてください。io/Webは選択肢の一つである依存関係の選択肢の1つに過ぎません。 –

答えて

5

ApplicationContextSpringApplication.runが返ってきて、それを処理するだけです。それはほとんどすべて

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

を必要とされるように、あなたはドキュメントから

+0

平易でシンプルな、あなたの素早い答えに感謝します。魅力のように働きます。 –

+0

コンテキストを直接使用しても、実際にはSpring Bootの機能を使用することはできません。最初に投稿されたものは、その機能を使用することに近いものでした。私はまもなく答えを提供しています。 –

3

を、GUIを開くなどして、豆を取得するためのApplicationContextを使うなどすることができます:http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-command-line-runner

アプリケーション。クラス

@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!"); 
    } 
} 

あなたも、それはそうrun()メソッドは、実際にあなたのメッセージを出力しますが、この方法は、近いあなたがメソッドを実装し、アプリケーションの起動時にそれが実行したいしているあなたの意図にそれを保持することができます。

+0

非常にきれいなだけでなく、ありがとう。 Beanを使用し、Beanをアプリケーションコンテキストから取得するアプローチよりも、このアプローチを使用する利点がありますか?つまり、単純なシナリオでBeanを使用する必要がありますか? –

+1

豆はどのようにスプリングワイヤーのものが一緒です。私の例でさえ、HelloSpringはBeanになります。 Springは、 'commandLineRunner'を実装しているすべてのBeanをスキャンするため、' run() 'メソッドを実行することを知っています。私が他の答えに対する私のコメントで述べたように、 'ApplicationContext'のインタラクションをSpring自体に任せておき、代わりに注釈/インターフェースを使うことができれば、もっと柔軟になるでしょう。 –

+0

これは良い解決策であると私は同意しますが、私は文脈を扱うこと自体悪いという意見に同意します。ソリューションによって、アプリケーション全体をSpringとして効率的に管理する必要がありますが、コンテキストソリューションを使用すると、アプリケーションの一部をSpringの外に保ち、必要な場所で使用することができます。推奨されるのは、ユースケースとアプリケーションによって異なります。 –

関連する問題