web-dev-qa-db-ja.com

SpringとGuiceを一緒にする、または単にSpring

新しいJava Webアプリをゼロから始めています。

Spring Frameworkの経験はあまりありませんが、Transaccions Managementなど、その機能の一部を使用したいと思っています。

一方で、依存性注入にはGuiceが本当に好きです。

GuiceとSpringが連携できることを知っています: http://www.jroller.com/mindcrime/entry/an_example_of_integrating_guice

しかし、アプリケーションの設計を始める前に、そのアプローチに従って誰かが問題を経験したかどうかを知りたいと思いました。

また、私がGuiceで本当に気に入っているのは、XML構成ファイルが必要ないということです。Javaモジュール、これは短くて読みやすいです。XML構成ファイルに代わるものはありますか?春に、Guiceに似ていますか?

22
csalazar

エンタープライズアプリケーションにはSpringだけで十分だと思います。

春にはXMLも必要です!!! Modern Spring Appsは JavaConfig およびminimal構成を使用します。 Spring Boot Guides を見てください。 Springアプリケーション全体では、XMLをまったく使用できません。

Guiceは素晴らしいですが、非常に限られています。 Springを使用すると、WebアプリケーションまたはRESTトランザクションと永続性を備えたアプリケーションを非常に簡単かつ高速に作成できます。Guiceを使用すると、これはさらに複雑になります。

16
MariuszS

始めたばかりの場合は https://github.com/spring-projects/spring-boot を使用することをお勧めします

優れた自動構成機能があり、ボイラープレートコードの記述を節約できます。 Tomcatが埋め込まれているため、アプリケーションサーバーの使用をやめることさえできます。たとえば、単純なMVCコントローラー(RESTエンドポイントとして使用できる)を実装する)は次のようになります。

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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

これでJava -jar your_package.jarを実行でき、それですべてです。また、トランザクション管理、データベース統合なども得られます。上記のリンク、特に https://github.com/spring-projects/spring-boot/tree/master/spring-boot)に他の例があります。 -samples ディレクトリ

11
Jakub Kubrynski

Springには、現在2つのメジャーリリース用のJavaベースのアノテーション設定があります。 XMLの1行を記述する必要はありません(web.xmlでさえも!)

私はGuiceとSpringで働いてきました。 DIを必要とする小規模なプロジェクトにはGuiceで十分ですが、MVCまたはトランザクションサポートにSpringを使用する場合は、DIを使用することもできます。 Guiceも、Springのように適切なプロファイルをサポートしていません。ローカルの開発、テスト環境、および本番環境で個別のBeanを使用する場合は、モジュールを手動で切り替える必要があります。

7
Tom G

Google Guiceには、Spring Dependency Injectionのすべての概念に対してほぼ1:1のマッピングがありますが、さらにいくつかのクールな点があります。

1。すべてJavaです。Google Guiceは、すべての構成をJavaコードに含まれているため、xml構成などを扱う必要はありません。

2。エラーメッセージの改善Guiceには、より適切なスタックトレースをクリーンアップして再スローするインターセプターがあります。春はちょうどすべてを吐き出します。

3。ジャストインタイムバインディング(または暗黙のバインディング)。つまり、引数がゼロのコンストラクターがある場合、追加のバインディングは必要ありません。それを注入するだけです!引数がゼロのコンストラクターであるか、すでに注入されている複数の引数を持つコンストラクターを注入しようとしている場合も同様で、追加の構成は必要ありません。繰り返しますが、注入するだけです!

4。 Eager/Lazy InjectionSpringで注入すると、何も注入しないか、すべて注入することになります。 Guiceには遅延注入するオプションがあります。これは、必要な依存関係グラフのサブセクションのみを作成することを意味します。これはいくつかのことを意味します-奇妙な特別なSpringテストファイルを必要とせず、Guiceはテストをより高速に注入し、Eclipseで統合テストを最小限のセットアップから実行なしで実行できます!

5。タイプによるバインド。これは、名前でバインドするSpringとは異なります。 Springでは、誤って2つのインスタンスを同じ名前にバインドすると、Springは警告なしに失敗し、最後に来たバインディング(yech)を使用してさらに混乱させます。 Springは「タイプでバインド」オプションを提供しますが、だまされないでください-その基礎となる実装はまだストリングです。

出典: https://github.com/google/guice

4

また、軽量のJ2SE DIエンジン用のHK2もご覧になることをお勧めします。これはGuiceやCDIに似ており、興味深いと思われる多くの拡張機能を備えています。また、双方向ブリッジを介してGuiceおよびSpringと連携します。ここからHK2の学習を開始できます: http://hk2.Java.net/ 。 Guiceブリッジに関する情報はこちら: https://hk2.Java.net/2.2.0-b27/guice-bridge.html 。 Springブリッジに関する情報はこちら https://hk2.Java.net/2.2.0-b27/spring-bridge.html

使用するDIプロバイダーの決定は、アプリケーションに必要な特別な機能に大きく基づいています。

0
jwells131313