Spring Frameworkの正確な目的は何ですか?[閉まっている]


623

私はSpringについてよく耳にします。人々は、SpringはWeb開発の優れたフレームワークであるとWebの至る所で言っています。Spring Frameworkの正確な目的は何ですか?


10
私は質問が非常に広いことを理解していますが、この非常に特殊なケースでは、Springについてよく知られていて、何を伝える必要もないという十分な人気があると考える人々からよく聞かれるJunion開発者にとって、質問は非常に重要だと思いますします。:あなたはInstagramの、何の目的がある....(私はインスタを使用したことがない告白)について聞いたことがない場合は、すべての後、あなたの手を上げる
USR-ローカルΕΨΗΕΛΩΝ

2
質問は10年前に行われましたが、その当時、Springは、Spring Boot、Spring Data、Spring Restなどのすべてのサブプロジェクトを備えた現在よりも少し小さかったのです。この質問の広さ。この質問をしたとき、私はDIとそれが必要な理由を理解したかっただけです。
マクシム

回答:


713

基本的にSpringは これは、非常に分離されたシステムの構築を可能にするパターンです。

問題

たとえば、システムのユーザーをリストして、次のようなインターフェイスを宣言する必要があるとしますUserLister

public interface UserLister {
    List<User> getUsers();
}

そしておそらく、すべてのユーザーを取得するためにデータベースにアクセスする実装:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

あなたの見解では、インスタンスにアクセスする必要があります(単なる例、覚えておいてください):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

上記のコードは変数を初期化していないことに注意してくださいuserLister。私たちは何をすべき?このようにオブジェクトを明示的にインスタンス化した場合:

UserLister userLister = new UserListerDB();

...ビューを、DBにアクセスするクラスの実装と組み合わせます。DB実装から、コンマ区切りファイルからユーザーリストを取得する別の実装に切り替えたい場合はどうすればよいですか(例です)。その場合、もう一度コードに移動して、上記の行を次のように変更します。

UserLister userLister = new UserListerCommaSeparatedFile();

これは、このような小さなプログラムでは問題ありませんが...何百ものビューと同様の数のビジネスクラスを持つプログラムではどうなりますか?メンテナンスは悪夢になります!

スプリング(依存性注入)アプローチ

Springが行うことは、XMLファイルまたは注釈を使用してクラスを接続することです。これにより、すべてのオブジェクトがSpringによってインスタンス化および初期化れ、適切な場所(サーブレット、Webフレームワーク、ビジネスクラス、DAOなど)に挿入されます。 ...)。

Springの例に戻ると、userListerフィールドのセッターと次のようなXMLファイルのいずれかが必要です。

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

または、単にビュークラスにファイルされたアノテーションを付けます@Inject

@Inject
private UserLister userLister;

このようにして、ビューが作成されると、魔法のようUserListerに動作する準備が整います。

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

それは素晴らしいです!だよね?

  • UserListerインターフェイスの別の実装を使用したい場合はどうなりますか?XMLを変更するだけです。
  • UserLister実装の準備ができていない場合はどうなりますか?UserListerビューの一時的なモック実装をプログラムし、ビューの開発を容易にします。
  • Springを使いたくない場合はどうなりますか?使用しないでください。アプリケーションはそれに結合されていません。制御の反転状態:「アプリケーションはフレームワークを制御し、フレームワークはアプリケーションを制御しない」。

Dependency Injectionには他にもいくつかのオプションがありますが、私の意見では、Springのシンプルさ、優雅さ、安定性に加えて、Springが非常に有名になったのは、SpringSourceの担当者が多くのPOJOをプログラミングして、Springを他の多くの一般的なフレームワークと統合するのに役立つということです。アプリケーションに侵入します。また、Springには、Spring MVC、Spring WebFlow、Spring Securityなどの優れたサブプロジェクトがいくつかあります。

お役に立てれば。とにかく、Martin Fowlerの依存性注入と制御の逆転に関する記事を読むことをお勧めします。彼は私よりも優れているからです。基本を理解した後、Spring Documentationをご覧ください。私の意見で 、これ史上最高のSpringブックとして使用されています


148
コードの行とXMLの行を変更する必要のある違いは何ですか?外部のxmlファイルは間違いなく複雑さを増すので、労力とメンテナンスの地獄はまったく同じか、さらに悪いことに?申し訳ありませんが、取得できません。まったくメリットがありません。何か不足している場合は記入してください。
フレッド2011

23
@fred-ユニットテストを行っているとします。依存関係の注入がない場合(DIはアノテーションまたはXMLで使用できます)、依存関係を模擬できないため、適切にテストできません。
Petar Minchev 2011

18
@fred-すべての注入をXMLで定義することは、実際にはほとんど意味がありません。維持するのが大変なオーバーヘッドです。そのため、EJBは注入ポイントの注釈の概念を導入しました。これらははるかに単純で、デフォルトのインスタンスが挿入されます(単体テストの場合、これは一度変更できます)。これはうまく機能したので、Springはこのアプローチをコピーしました。必要に応じて(ただし、本当に必要な場合に限り)、アノテーションはEJBのXMLによってオーバーライドできます。
Mike Braun

36
または、ファクトリスタティックメソッドを使用します。ファクトリーの戻りタイプを変更すると、その戻り値を使用するすべてのクラスが変更されます。Presto Springは不要になりました...
Qix-モニカは2014年

16
@mmcrae XMLを作成するのではなく、IDEで1回のリファクタリング呼び出しを実行します。
Qix-モニカは2015

63

SpringにSkafmanが正しく指摘したように)MVCフレームワークが含まれています。簡単に説明すると、ここに私の入力があります。Springは、サービスレイヤー、Webレイヤー、ビジネスレイヤーの分離をサポートしていますが、実際に最も効果的なのはオブジェクトの「注入」です。したがって、例を使用して説明するには、以下の例を検討してください。

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

これで、コードにRoadTripというクラスがあります。

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Tripのインスタンスが必要なときはいつでも、SUVでFourWheelを初期化したい場合もあれば、セダンが必要な場合もあります。それは本当にあなたが特定の状況に基づいて何を望んでいるかに依存します。

この問題を解決するには、ファクトリパターンを作成パターンにしたいとします。ファクトリが正しいインスタンスを返す場所。したがって、最終的には、オブジェクトを正しくインスタンス化するためだけに多くのグルーコードが作成されることになります。Springは、グルーコードがなくてもグルーコードの機能を最大限に発揮します。XMLでマッピングを宣言すると、オブジェクトが自動的に初期化されます。また、インスタンスにシングルトンアーキテクチャを使用することも多く、メモリ使用量の最適化に役立ちます。

これは制御の反転とも呼ばれます。これを行う他のフレームワークは、Google guice、Picoコンテナなどです。

これとは別に、Springには検証フレームワークがあり、JDBC、iBatis、Hibernate(およびその他多数)と連携してDAOレイヤーを幅広くサポートしています。データベーストランザクションに対する優れたトランザクション制御を提供します。

Springには、「Pro Spring」のような優れた本で読むことができるものがもっとたくさんあります。

以下のURLも役立つ場合があります。
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss?l = SpringFramework


5
Spring はMVCフレームワークが含まれています。しかし、それはそれだけではありません。
skaffman 2009年

WebMVCは、あまり重要なことをしたくありませんが、コアスプリングディストリビューションの一部です。Webflow、RCPなどはそうではありません。
skaffman 2009年

1
それはいいですね、JavaでタイプInterfaceのオブジェクトをインスタンス化できることを知りませんでした- これは違法な @skaffmanがこの答えを理解するのに役立ちます(FourWheelのインスタンスを参照)
Jossie Calderon

47

昔、Springは(GuicePicoContainer、...)と同様の依存性注入フレームワークでしたが、現在では、エンタープライズアプリケーションを構築するための完全なソリューションになっています。

もちろん、Spring Dependency Injection、つまり、Springの心臓部はまだそこにあります(そして、他の良い答えをここで確認できます)が、Springからはまだまだあります...

Springには多数のプロジェクトがあり、それぞれにいくつかのサブプロジェクトがあります(http://spring.io/projects)。誰かが春について話すとき、あなたは彼が話している春のプロジェクトを見つけなければなりません、それは春の枠組みとして知られているそれだけの春のコアであるか、それは別の春のプロジェクトです。

言及する価値があるいくつかの春のプロジェクトは次のとおりです。

アプリケーションにさらに特定の機能が必要な場合は、そこにも見つけることができます。


  • バッチアプリケーションの 開発を可能にするように設計されたSpring Batchバッチフレームワーク
  • Spring HATEOAS HATEOASプリンシパルに基づくREST APIの簡単な作成
  • モバイルアプリケーション開発のためのSpring MobileおよびSpring Andriod
  • Spring Shell はフル機能のシェル(別名コマンドライン)アプリケーションを構築します
  • クラウドアプリケーションのSpring CloudおよびSpring Cloud Data Flow

例えば、spring-social-facebookhttp://projects.spring.io/spring-social-facebook/)などの小さなプロジェクトもいくつかあります。

Spring FrameworkプロジェクトのSpring MVC一部であるモジュールを備えているため、Web開発にSpringを使用できます。または、struts2などの別のWebフレームワークでSpringを使用することもできます。


1
実際に、Springのmvc、data、jpa、およびその他の部分に、SpringのコアDIを使用せず、代わりにDaggerをSpringの中心部に配置するオプションを確認したいと思います。
dlamblin

25

春は何ですか?私はその質問にすぐ答えますが、最初に、ビクターヒューゴの例をもう一度見てみましょう。新しいフレームワークの必要性を正当化しないため、これは良い例ではありません。

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

できた!したがって、数百または数千のビューがある場合でも、Spring XMLアプローチのように、1行のコードを変更するだけで済みます。しかし、コード行を変更するには、XMLを編集するのではなく、再コンパイルが必要ですか?さて、私のうるさい友達、Antとスクリプトを使用してください!

では、Springの目的は何でしょうか?それは:

  1. 群れを追跡する盲目の開発者
  2. Uniでそのようなフレームワークを教えていないため、大学院のプログラマーを雇いたくない雇用者
  3. 悪いデザインで始まり、パッチワークが必要なプロジェクト(ビクターヒューゴの例に示されているように)

参考資料http : //discuss.joelonsoftware.com/?joel.3.219431.12


11
欲求不満はさておき、私はあなたの議論について疑問に思っています。私はあなたが悪いデザインを生み出すために使用できないプログラミングツールを知りません。あなたが目指しているのは、フレームワークを使用すると、悪いコードに多くのことをさせることができるということです。これは普遍的に当てはまり、Springに固有のものではありません。それ以外の点は何ですか?有能な開発者は、Springが提供するもの、特に使用しているフレームワークのどのツールを特に活用できると思いませんか?少なくとも、Spring開発者がクラスの拡張について聞いたことがないということをあなたが示唆していないことは間違いありません。しかし、さらに読むことは陽気です。
sthzg 2015年

2
さらに、ビューには注入されたサービス(UserLister)が1つだけ必要なため、この例は機能しますが、異なる子の間で共有されていない複数のサービスが必要な場合はどうBaseViewでしょうか。(幸いなことに)Javaには多重継承はありません。
エドゥアールベルト2017

@EdouardBertheフェアポイント。私の回答はDIを無視する試みではなく、受け入れられた回答に示されている例が最大ではないことを指摘するだけです。あなたが提案しているシナリオは、おそらくよりうまくいくでしょう。私が実際に試みたポイントは、DIが必要ないということではなく、それを行うためのフレームワーク全体が必要ではないということです。
Ash

19

要約すると、Springはアプリケーションの「接着剤」です。異なるフレームワークと独自のコードを統合するために使用されます。


15

春は3つです。

  1. SpringはDependency Injectionを処理するので、Martin FowlerによるDependency Injectionの優れた紹介を読むことをお勧めします。
  2. Springが次に行うことは、優れたJavaライブラリを非常にエレガントな方法でラップしてアプリケーションで使用することです。良い例として、SpringがTask ExecutorとQuartz Schedulerをラップする方法をご覧ください。
  3. 第三に、SpringはREST、MVC WebフレームワークなどのWebの実装を数多く提供します。最初の2つにSpringを使用しているため、これらの値が表示されます。おそらく、Webアプリが必要とするすべてのものに使用できます。

問題は、Spring DIが本当によく考えられていることです。他のものはすべてがよく考えられており、Springがそれをうまくラップするという点で、他のもののラッパーは本当によく考えられています。MVCとRESTのSpringの実装とその他すべてのものはうまくいきませんが(YMMV、IMHO)、例外があります(Spring Securityは爆弾です)。だから私はDIのためのSpringとそのクールなラッパーを使用する傾向がありますが、Web(タペストリーがとても好きです)、REST(ジャージーは本当に堅牢です)などの他のものを好みます。


9
YMMV、IMHO-私のような略語に堪能でないあなたのために私のマイナーな意見であなたのマイレージは変わるかもしれません...
坂本一馬

11

SpringでWebアプリケーションにおそらく必要なもの-

  • 2.5+以降では、POJOをコントローラクラスとして使用できるSpring MVC。つまり、特定のフレームワーク(Strutsや2.5より前のSpringなど)から拡張する必要はありません。コントローラークラスも依存関係の注入のおかげでテストが非常に簡単です
  • HibernateとのSpring統合。これは、ORMソリューションでの作業を簡略化する優れた機能を果たします(ほとんどの場合)。
  • WebアプリにSpringを使用すると、アプリケーションのすべてのレベルでドメインオブジェクトを使用できます。Hibernateを使用してマップされる同じクラスは、「フォームBean」として使用するクラスです。本質的に、これは、クラスの数を削減することになるという理由もあって、より堅牢なドメインモデルにつながります。
  • Springフォームタグを使用すると、手間をかけずにフォームを簡単に作成できます。

さらに、Springは非常に巨大です。そのため、Spring AOPやSpring Securityなど、Webアプリでの使用に興味を持つ可能性のあるものが他にもたくさんあります。ただし、上記の4つは、Webアプリで使用されるSpringの一般的なコンポーネントについて説明しています。


9

これには2つの部分があります。

  1. 「Springの正確な意味」->勝利者hugoが承認した回答を参照してください。
  2. 「[...] Springは[a] Web開発の優れたフレームワークです」->これはSpring MVCについて話していると言っている人々。Spring MVCは、Springの多くの部分の1つであり、依存関係の注入など、Springの一般的な機能を利用するWebフレームワークです。それは非常に構成可能であるという点でかなり一般的なフレームワークです。異なるdbレイヤー(Hibernate、iBatis、プレーンJDBC)、異なるビューレイヤー(JSP、Velocity、Freemarker ...)を使用できます。

Spring MVCを使用しなくても、Webアプリケーションで完全に適切にSpringを使用できることに注意してください。Wicket、Struts、Seamなどの他のWebフレームワークを使用しながら、ほとんどのJava Webアプリケーションがこれを行うと思います...


8

Springは、クラスのインスタンスを接着するのに最適です。Hibernateクラスは常にデータソースを必要とすることを知っています。Springはそれらを一緒にワイヤリングします(データソースの実装も持っています)。

データアクセスオブジェクトには常にHibernateアクセスが必要です。SpringはHibernateクラスをDAOにワイヤリングします。

さらに、Springは基本的に一連のライブラリの堅固な構成を提供し、その中で、どのライブラリを使用すべきかについてのガイダンスを提供します。

春は本当に素晴らしいツールです。(私はSpring MVCについて話しているのではなく、単にベースフレームワークについて話していました)。


5

Springは構成用のさまざまな注釈のサポートを導入したため、受け入れられた回答には注釈の使用は含まれていません。

スプリング(依存性注入)アプローチ

そこで、XMLファイルを使用してクラスを結び付ける別の方法として、注釈があります。のは、受け入れ答えからの例を使用してみましょうと注釈のいずれかを使用して、クラスに直接Beanを登録し@Component@Service@Repositoryまたは@Configuration

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

このようにして、ビューが作成されると、魔法のようにUserListerが動作するようになります。

上記のステートメントは有効ですが、XMLファイルを使用する必要がなく@Autowired、関連する実装を見つけて挿入する別の注釈と接続する必要はありません。

@Autowired
private UserLister userLister;

使用@Bean注入するBean実装を取得するために使用される方法に注釈を。


違う。@Beanクラスレベルではアノテーションを使用できません。いずれかでなければなりません@Component@Service@Repository残りが正しいかなど。この方法でのインターフェイスの自動配線は、注入に適したクラスパスに候補クラスが1つしかない場合にのみ機能することも指摘してください。そうでない場合、Springアプリケーションエラーが発生します。
Stefano L

@StefanoL:はい、そうです。人は私の間違いを無視したのだろうか。コメントをありがとう。
ニコラス2018年

4

利点は、依存性注入(DI)です。それはオブジェクト作成のタスクをアウトソーシングすることを意味します。例を挙げて説明しましょう。

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

私のコードには、次のようなLunchDecideクラスがあります。

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

上記のクラスでは、気分に応じて、Buffet()またはPlated()を選択します。ただし、このシステムは密結合されています。異なるタイプのオブジェクトが必要になるたびに、コードを変更する必要があります。この場合、行をコメント化します。50人の異なるユーザーが使用する50の異なるクラスがあると想像してください。それは混乱の地獄です。この場合、システムを分離する必要があります。LunchDecideクラスを書き換えましょう。

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

新しいキーワードを使用してオブジェクトを作成する代わりに、Lunch Typeのオブジェクトへの参照をパラメーターとしてコンストラクターに渡したことに注意してください。ここでは、オブジェクトの作成を外部委託しています。このコードは、Xml構成ファイル(レガシー)またはJava注釈(モダン)を使用して接続できます。どちらの方法でも、作成するオブジェクトのタイプの決定は、実行時にそこで行われます。オブジェクトは、Xmlによってコードに挿入されます。コードは、そのジョブのXmlに依存しています。したがって、依存性注入(DI)。DIは、システムを疎結合にするのに役立つだけでなく、依存関係を模倣できるので、単体テストの作成を簡素化します。最後になりましたが、DIはアスペクト指向プログラミング(AOP)を合理化し、モジュール化のさらなる分離と向上につながります。また、上記のDIはコンストラクターインジェクションです。


ただし、Springの場合でも、Beanを定義します。Bean IDはコードで指定されますね。ですから明日Beanを変更する場合でも、コードを変更する必要がありますね。メリットは何ですか。
アルパンブーフ2018

@ArpanBuch Springの利点は、コードを再コンパイルせずに別の実装を選択できることです(他の実装がすでに存在する限り)。私は初心者なので間違っているかもしれません。
byxor

4
  • Springは、J2EEに比べて軽量で柔軟なフレームワークです。
  • Springコンテナは、制御の反転として機能します。
  • SpringはAOP、つまりプロキシとシングルトン、ファクトリ、テンプレートメソッドのデザインパターンを使用します。
  • 階層型アーキテクチャ:懸念事項と再利用可能なレイヤーの分離と簡単なメンテナンス。

ここに画像の説明を入力してください


1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101 2017

3

Springは、Enterprise JavaBeans(EJB)テクノロジーの優れた代替手段です。また、WebフレームワークとWebサービスフレームワークコンポーネントもあります。


1
修正できますか?(恐ろしい)EJB 2の代替案でした ...「新しいEJB」(一部、JPA 2など)は受け入れられています。春のパート「一種のEJB」の「ハッピーアワー」が過ぎたようです。2015
Jacek Cz

1

Springは、かなり単純な依存性注入システムとして始まりました。今ではそれは巨大であり、中にはすべてがあります(格言の台所の流しを除く)。

しかし、恐れることはありません。それは非常にモジュール化されているので、必要な部分だけを使用できます。

すべての始まりを確認するには、次のことを試してください。

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

古いかもしれませんが、素晴らしい本です。

今回はSpring専用の別の優れた本については、以下を参照してください。

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

また、Springの古いバージョンを参照していますが、一見の価値があります。


1

Springは最初は依存関係の注入でしたが、ほとんどすべてのラッパー(JPA実装のラッパーなど)のラッパーを追加しました。

長い話... Springのほとんどの部分はXMLソリューション(XMLスクリプトエンジン... brrrr)を優先するので、DIにはGuiceを使用します

良いライブラリですが、例えば、Spring JDBC(多分、実際の名前のパラメーターを持つ1つのJava jdbcソリューション)が大きくなるdepnedenciecにより、次にmaven 4-5を採用しています。

Spring MVC(「ビッグスプリング」の一部)をWeb開発に使用する...これは「要求ベース」のフレームワークであり、「要求vsコンポーネント」という聖なる戦争があります...


1
私は今、SpringフレームワークがXMLからアノテーションおよびJava構成に移行しようとしていると思います。
マクシム2015

0

以前は、純粋に技術的な観点からSpringフレームワークについて考えていました。

チームワークとエンタープライズWebアプリケーションの開発の経験を考えると、Springは個々の要素(beans)を分離することにより、アプリケーション(webアプリケーション)の開発高速化するためのものだと思います。開発が速くなると、人気が高まります。Springでは、アプリケーションの構築(配線)の責任をSpringフレームワークに移すことができます。Springフレームワークの依存性注入は、個々のBeanを動作中のアプリケーションに接続/配線する責任があります。

このようにして、開発者は、Bean間のインターフェースが定義されるとすぐに、個々のコンポーネント(Bean)の開発により集中することができます。

このようなアプリケーションのテストは簡単です。主な焦点は個々のBeanにあります。これらは簡単に分離およびモックできるため、ユニットテストは高速で効率的です。

Springフレームワークは、@ Controller@Restcontroller)、@ Repository@ Componentなどの複数の特殊なBeanを定義して、Webの目的を果たします。SpringとMavenは、開発者にとって直感的な構造を提供します。個別の要素が分離され、再利用できるため、チーム作業は簡単かつ迅速です。


0

Springフレームワークは、Web開発に最適であり、残りのAPIサービスにより具体的です。

それはのために良いですので、その上記の依存性注入 のような他のモジュールと統合春のセキュリティスプリングAOPMVCフレームワークmicroservices

どのアプリケーションでも、セキュリティはおそらく要件です。
長いメンテナンスが必要な製品を構築する場合は、Aopコンセプトを活用する必要があります。

アプリケーションに大量のトラフィックがあり、負荷が増加している場合は、マイクロサービスの概念を使用する必要があります。

Springはこれらすべての機能を1つのプラットフォームで提供しています。多くのモジュールでのサポート。
最も重要なことは、Springはオープンソースであり、拡張可能なフレームワークであり、ライフサイクルにカスタムコードを統合するためのあらゆる場所にフックがあります。

Spring Dataは、プロジェクトとの統合を提供する1つのプロジェクトです。


したがって、春はほとんどすべての要件に適合することができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.