[解決済み] Spring Frameworkは一体何のためにあるのでしょうか?[クローズド]
質問
をよく耳にします。 春 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のドキュメント
私の意見では、それは
は
以前は
春一番の本
関連
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Javaにおける静的クラス
-
[解決済み】Apache Camelとは一体何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
SpringBootApplication を型解決できない。
-
javaの模造品QQ WeChatのチャットルーム
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
自動配線された依存性のインジェクションに失敗しました。
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
java 例外。Javaツールの初期化