1. ホーム
  2. java

[解決済み] Spring Frameworkは一体何のためにあるのでしょうか?[クローズド]

2022-03-15 14:25:50

質問

をよく耳にします。 Springはウェブ開発のための良いフレームワークだと言われています。Spring Frameworkは一言で言うと何のためのフレームワークなのでしょうか?なぜ、普通のJavaではなく、Springを使うべきなのか。

解決方法は?

基本的に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 (Dependency Injection)のアプローチ

Springが行うことは ワイヤー この方法では、すべてのオブジェクトはSpringによってインスタンス化され、初期化されます。 インジェクション を適切な場所(サーブレット、Webフレームワーク、ビジネスクラス、DAO、etc.etc.)に配置します。

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をもう使いたくない場合はどうすればいいですか? 使わなければいいだけです。あなたのアプリケーションはそれと連動していないのです。 制御の逆転 は次のように述べています: "アプリケーションがフレームワークを制御するのであって、フレームワークがアプリケーションを制御するのではありません"。

Springを有名にしたのは、そのシンプルさ、エレガントさ、安定性に加えて、SpringSourceのメンバーが多くのPOJOをプログラムして、アプリケーションに干渉することなく他の多くの共通フレームワークと統合するのを助けてくれたからだと私は思っています。また、SpringにはSpring MVC、Spring WebFlow、Spring Securityなどの優れたサブプロジェクトがあり、その他にも数え切れないほどある。

お役に立てれば幸いです。とにかく、以下を読むことをお勧めします。 Martin Fowlerの記事 依存性注入と制御の逆転については、私よりも彼の方がよくやっているからです。 基本を理解した後は Springのドキュメント 私の意見では、それは 以前は 春一番の本