私はSpringを学んでいます。スタンドアロンアプリケーションでどのように使用するか(また、Webアプリケーションを作成するときにも)、私は質問があります。これまでコード化されている例では、単純なmainメソッドを使用していましたが、ここではgetBeanを呼び出してBeanを取得します。コンテキストオブジェクト。しかし、おそらく複数のクラスでこれをやりたがっているので、まずコンテキストを取得してからgetBeanを呼び出すか、他のよりクリーンな代替メソッドがありますか?それとも、スタンドアローンやウェブアプリでこれを行うのですか?スタンドアロンアプリケーションでSpringを使用する
答えて
どこでもcontext.getBean()
を呼び出すならば、依存性注入フレームワークであるSpringの全体のポイントが不足している可能性があります。
スタンドアロンのアプリケーションでは、通常、「ルート」Beanを取得するために、context.getBean()
を1回(または少なくともごくまれに)呼び出します。このBeanはSpringによって他のBeanなどとインジェクションされます。
ウェブアプリケーションでは、すべてのフレームワークを使用するかどうかによって異なります。しかし、通常、コンテキストをロードするweb.xmlにリスナーを登録し、コントローラはSpringによって作成および/または挿入されます。
コンテキストを作成するには、1つのクラス(メインクラス、おそらく)がSpring対応である必要があります。他のすべてのクラスは、Springを介して引き続き相互接続でき、コンテキストを認識する必要はありません。
これは、作成しているアプリケーションによって異なりますが、getBean()
の呼び出しを最小限に抑えてください。最初のBeanをコンテキストから直接取り出し、残りのロジックをBean自体に入れます。線に沿って何か:
Bootstrap boot = context.getBean(Bootstrap.class);
boot.start();
そして、あなたのアプリケーションロジックのすべての残りの部分がstart()
内で行われます。スレッドを作成したり、イベントを聞いたりすることができます。
あなたは正しい行です。主な方法は、あなたが発見したアプリケーションコンテキストを初期化します。そのトリックは、そのアプリケーションコンテキストを使用してアプリケーションへのエントリポイントを作成することです。その豆は、春に作成されているあなたのために配線されています..
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationMain {
public static void main(String[] args) {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/applicationContext.xml");
MyApplication app = BeanFactoryUtils.beanOfType(ctx, MyApplication.class);
app.init();
}
}
私はちょうどアプリケーションのinit - メソッドとしてapp.initを設定します。このように、ルックアップと明示的な呼び出しは必要ありません。すべてが春に処理されます。 – Laures
@Laures - これはもっと暗黙的にすることができますが、明示的な呼び出しが必要な場合があります。 Springには、ここで適用可能な 'org.springframework.context.Lifecycle'インターフェースがあります。アプリケーションコンテキストで 'start()'、 'stop()'または 'isRunning()'が呼び出されると、Lifecycleインタフェースを実装するすべてのBeanには、同等のメソッドが呼び出されます。このような簡単な例では、それは過度だと思います。 – sw1nn
- 1. スタンドアロンアプリケーションでWPFナビゲーションを使用する
- 2. スタンドアロンアプリケーションでバックエンドサービスプロバイダを使用する
- 3. JavaスタンドアロンアプリケーションのSpring-boot application.yaml
- 4. ウェブサイトとスタンドアロンアプリケーションでDjangoフレームワークを使用
- 5. 簡単なSpring、スタンドアロンアプリケーション用のClasspathApplicationContextの使用方法、再利用方法
- 6. スタンドアロンアプリケーション用のapache sparkでmagellan geospatialライブラリを使用する
- 7. スタンドアロンアプリケーションでのSpark View Engineの使用
- 8. Javaスタンドアロンアプリケーション(Swing)でSpring Autowiringを実装できます
- 9. スタンドアロンアプリケーションでスプリング統合を使用できますか?
- 10. @AutowiredアノテーションはSpringスタンドアロンアプリケーションでは機能しません
- 11. スタンドアロンアプリケーションでDALとAuthを使用した場合のAttributeError
- 12. スタンドアロンアプリケーション用のRESTful APIコールバック
- 13. スタンドアロンアプリケーションにはどのJREを使用しますか?
- 14. PHPスタンドアロンアプリケーション
- 15. スタンドアロンアプリケーションQt
- 16. C++スタンドアロンアプリケーション
- 17. .NETオブジェクトを使用してスタンドアロンアプリケーションでCrystal Reportを駆動できますか?
- 18. EJB-MDB、Eclipse、Jettyサーバーを使用したスタンドアロンアプリケーションの例?
- 19. RDF4J RIO UnsupportedRDFormatExceptionスタンドアロンアプリケーションを使用してHTTPRepositoryにデータを追加するとき
- 20. スタンドアロンアプリケーションとWebアプリケーション
- 21. CAS:スタンドアロンアプリケーションのサービスチケット
- 22. tomcat内のスタンドアロンアプリケーション
- 23. ロギング:スタンドアロンアプリケーションのSyslog?
- 24. JavaバックエンドWebサービスでC#スタンドアロンアプリケーション
- 25. Qtで静的ビルド(スタンドアロンアプリケーション)
- 26. Powershellでのスタンドアロンアプリケーションの作成
- 27. Lucene/SolrをSpringデータで使用する
- 28. robotframeworkでSpring-wiredライブラリを使用する
- 29. Springでアプリケーションコンテキストを使用するタイミング。
- 30. SpringブートでJdbcTemplateを使用する
ああ、あなたはアプリケーションをブートストラップのためにそれを使用します。 – LuckyLuke
はい、まさに、@ Thomasz Nurkiewiczsの答えに示されているとおりです。 –
よろしくお願いいたします。私はDIフレームワークのポイントを見逃しているということをあなたが説明することができますか?私が読むことができるように。また、なぜあなたは一度だけそれを呼び出すと仮定されていますか? – LuckyLuke