春
1.春の概要
1.1はじめに
春:春—>ソフトウェア業界に春をもたらす
2002年、RodJahnsonは最初にSpringフレームワークのプロトタイプinterface21フレームワークを立ち上げました。
2004年3月24日、interface21フレームワークに基づくSpringフレームワークが再設計され、公式バージョン1.0がリリースされました。
ロッドジョンソンの学位を想像するのは難しいです。彼はシドニー大学の博士号を取得していますが、彼の専攻はコンピューターではなく音楽です。
春のコンセプト:既存のテクノロジーをより実用的にする既存のフレームワークテクノロジーを統合した、それ自体が寄せ集めです
公式サイト:http://spring.io/
公式ダウンロードアドレス:https://repo.spring.io/libs-release-local/org/springframework/spring/
GitHub:https://github.com/spring-projects
ここではMavenを使用しています。依存関係をコピーするには、Mavenウェアハウスにアクセスしてください。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.0</version>
</dependency>
</dependencies>
1.2、利点
1.Springはオープンソースで無料のフレームワーク、コンテナです。
2.Springは軽量のフレームワークであり、邪魔になりません。
3.制御の反転IoC、対面Aop
4.物事のサポート、フレームワークのサポート
…
一文の要約:
Springは、制御の反転(IoC)とアスペクト指向(AOP)コンテナー(フレームワーク)の軽量な反転です。
1.3構成
Springフレームワークは、明確に定義された7つのモジュールで構成される階層化アーキテクチャーです。Springモジュールは、Beanを作成、構成、および管理する方法を定義するコアコンテナー上に構築されています。
Springフレームワークを構成する各モジュール(またはコンポーネント)は、単独で存在することも、1つ以上の他のモジュールと組み合わせて実装することもできます。各モジュールの機能は次のとおりです。
- コアコンテナ:コアコンテナは、Springフレームワークの基本機能を提供します。コアコンテナの主要コンポーネントは、ファクトリパターンの実装であるBeanFactoryです。BeanFactoryは、制御の反転(IOC)モデルを使用して、アプリケーションの構成と依存関係の仕様を実際のアプリケーションコードから分離します。
- Springコンテキスト:Springコンテキストは、Springフレームワークにコンテキスト情報を提供する構成ファイルです。Springコンテキストには、JNDI、EJB、電子メール、国際化、検証、スケジューリング機能などのエンタープライズサービスが含まれます。
- Spring AOP:構成管理機能を通じて、SpringAOPモジュールはアスペクト指向プログラミング機能をSpringフレームワークに直接統合します。したがって、SpringフレームワークにAOPをサポートするオブジェクトを簡単に管理させることができます。Spring AOPモジュールは、Springベースのアプリケーションのオブジェクトにトランザクション管理サービスを提供します。Spring AOPを使用すると、コンポーネントに依存することなく、宣言型トランザクション管理をアプリケーションに統合できます。
- Spring DAO:JDBC DAO抽象化レイヤーは、さまざまなデータベースベンダーによってスローされた例外処理とエラーメッセージを管理するために使用できる意味のある例外階層を提供します。例外階層はエラー処理を簡素化し、書き込む必要のある例外コードの量を大幅に削減します(接続の開閉など)。Spring DAOのJDBC指向の例外は、一般的なDAO例外階層に従います。
- Spring ORM:SpringフレームワークはいくつかのORMフレームワークを挿入し、それによってJDO、Hibernate、iBatis SQLMapなどのORMオブジェクトリレーショナルツールを提供します。これらはすべて、Springの一般的なトランザクションとDAO例外階層に従います。
- Spring Webモジュール:Webコンテキストモジュールは、アプリケーションコンテキストモジュールの上に構築され、Webベースのアプリケーションにコンテキストを提供します。したがって、SpringフレームワークはJakartaStrutsとの統合をサポートします。Webモジュールは、マルチパートリクエストの処理とドメインオブジェクトへのリクエストパラメータのバインドの作業も簡素化します。
- Spring MVCフレームワーク:MVCフレームワークは、Webアプリケーションを構築するためのフル機能のMVC実装です。ストラテジーインターフェイスを通じて、MVCフレームワークは高度に構成可能になります。MVCは、JSP、Velocity、Tiles、iText、POIなどの多数のビューテクノロジーに対応します。
1.4、拡張
Spring BootgSpring Cloud
- Spring Bootは、Springの迅速な構成の足場のセットであり、SpringBootに基づいて単一のマイクロサービスを迅速に開発できます。
- SpringCloudはSpringBootに基づいています。
- Spring Bootは、高速で統合が容易な単一のマイクロサービス個人に焦点を当てており、SpringCloudはグローバルサービスガバナンスフレームワークに焦点を当てています。
- Spring Bootは、構成より制約の概念を使用します。多くの統合ソリューションが選択されています。構成なしで構成できます。SpringCloudの大部分はSpringBootに基づいて実装されています。SpringBootはSpringCloudとは独立して使用および開発できます。 。プロジェクトですが、SpringCloudは依存関係であるSpringBootと切り離せません。
- SpringBootはSpringCloundで接続の役割を果たします。SpringCloudを学びたい場合は、SpringBootを学ぶ必要があります。
2.IOC理論の導出
IOCの基本
空のMavenプロジェクトを作成する
2.1、分析と実現
元の方法でコードを記述します。
1.最初にUserDaoインターフェースを作成します
public interface UserDao {
public void getUser();
}
2.Daoの実装クラスを再度記述します
public class UserDaoImpl implements UserDao {
@Override
public void getUser() {
System.out.println("获取用户数据");
}
}
3.次に、UserServiceのインターフェイスを記述します
public interface UserService {
public void getUser();
}
4.最後に、サービスの実装クラスを記述します
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
5.テストします
@Test
public void test(){
UserService service = new UserServiceImpl();
service.getUser();
}
これが私たちの独自のやり方です。最初はみんな同じように書いていましたが、今から修正しましょう。
Userdao実装クラスを追加します。
public class UserDaoMySqlImpl implements UserDao {
@Override
public void getUser() {
System.out.println("MySql获取用户数据");
}
}
次に、MySqlを使用する場合は、サービス実装クラスの対応する実装を変更する必要があります
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoMySqlImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
仮説では、別のUserdao実装クラスを追加します。
public class UserDaoOracleImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Oracle获取用户数据");
}
}
次に、Oracleを使用し、サービス実装クラスの対応する実装を変更する必要があります。ニーズが非常に大きいと仮定すると、このメソッドはまったく適用できず、反人間的でさえ、すべての変更には多くのことが必要です。この設計の結合が高すぎて、全身に影響を及ぼします。
では、どうすればそれを解決できますか?
使用する必要がある場所に実装することはできませんが、インターフェイスを残し、setを使用して、コードに移動して変更します。
public class UserServiceImpl implements UserService {
private UserDao userDao;
// 利用set实现
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
次に、テストクラスに移動してテストします。
@Test
public void test(){
UserServiceImpl service = new UserServiceImpl();
service.setUserDao( new UserDaoMySqlImpl() );
service.getUser();
//那我们现在又想用Oracle去实现呢
service.setUserDao( new UserDaoOracleImpl() );
service.getUser();
}
違いに気づいたことはありますか?違いはないと言う人も多いかもしれませんが、クラスメートは根本的な変化を遂げ、場所も異なります。よく考えてみてください。以前はすべてがプログラムによって制御および作成されていましたが、今ではオブジェクトの作成を自分で制御し、呼び出し元に主導権を与えます。プログラムは、オブジェクトの作成方法や実装方法について心配する必要はありません。インターフェイスの提供のみを担当します。
このような考え方は本質的に問題を解決します。私たちプログラマーはもはやオブジェクトの作成を管理せず、ビジネスの実現にもっと注意を払います。結合は大幅に減少します。これはIOCのプロトタイプです!
2.2IOCの本質
IoC(制御の反転)は設計のアイデアです。DI(依存性注入)はIoCを実装する方法です。一部の人々は、DIはIoCの単なる別の用語であると考えています。IoCのないプログラムでは、オブジェクト指向プログラミングを使用します。オブジェクトの作成とオブジェクト間の依存関係は、プログラムに完全にハードコーディングされています。オブジェクトの作成は、プログラム自体によって制御されます。制御の反転後、作成オブジェクトの数は、個人の第三者に転送されます。いわゆる制御の反転とは、依存オブジェクトを取得する方法が逆になることであると考えられています。
IoCはSpringフレームワークのコアコンテンツです。IoCはさまざまな方法で完全に実装されています。XML構成または注釈を使用できます。新しいバージョンのSpringは、構成なしでIoCを実装することもできます。
Springコンテナは、初期化時に最初に構成ファイルを読み取り、構成ファイルまたはメタデータに従ってオブジェクトを作成および編成してコンテナに格納し、プログラムの使用時にIocコンテナから必要なオブジェクトを取り出します。
BeanをXMLモードで構成する場合、Beanの定義情報は実装から分離され、2つをアノテーションの方法で統合できます。Beanの定義情報は、アノテーションの形式で実装クラスに直接定義されます。 、したがってゼロを達成する構成の目的。
制御の反転は、説明(XMLまたは注釈)およびサードパーティを介して特定のオブジェクトを生成または取得する方法です。Springで制御の反転を実装するのはIoCコンテナーであり、その実装方法は依存性注入(DI)です。