1. 春の紹介
1.1 春の概要
Spring はオープンソースのデザインレベルのフレームワークで、ビジネス ロジック層と他の層の間の疎結合の問題を解決し、システム アプリケーション全体にインターフェイス指向のプログラミングのアイデアを実装します。Spring は、2003 年に登場し、Rod Johnson によって作成された軽量の Java 開発フレームワークです。簡単に言えば、Spring は階層化された javaSE/EE フルスタック (ワンストップ) 軽量オープンソース フレームワークです。
Spring は、プロジェクト コンポーネント間の依存関係を分離するのに役立つ、IOC および AOP に基づいたマルチレイヤー JavaEE システムを構築する、非常にアクティブなオープン ソース フレームワークです。彼の主な目的は、企業の開発を簡素化することです。
簡単に言えば、Spring は階層化された JavaEE/EE フルスタック (ワンストップ) 軽量オープンソース フレームワークです。高凝集性と低結合性! !!
湧き水、湧き水!JAVAEEの春が来た!
1.2 スプリングの起源
2002 年に Rod Johnson が編集した書籍 == 「Expert one on one J2EE design and Development」 == の中で、彼は JavaEE システム フレームワークが肥大化し、非効率で、現実から乖離している現状に疑問を抱き、積極的に探究し、春のロゴの方法を革新します。この本に導かれて、彼は、実際のニーズから始めて、軽さ、器用さ、開発、テスト、展開の容易さに重点を置き、J2EE 従来の開発のジレンマを打破しようとする軽量開発フレームワークである、interface21 フレームワークを作成しました。Spring フレームワークは、interface21 フレームワークに基づいており、再設計され、継続的に強化され、2004 年 3 月 24 日に正式バージョン 1.0 がリリースされました。同年、彼は古典的な傑作『Expert one-on-one J2EE Development without EJB』をリリースしました。これは Java 界に大騒動を巻き起こし、Java 開発者のプログラミングと開発に対する考え方を常に変えました。本書では、著者が長年の豊富な実践経験に基づいて、煩雑で肥大化した EJB のさまざまな構造を 1 つずつ分析および否定し、簡潔かつ実践的な方法で置き換えます。ここまでの戦いには勝利してきたが、ロッド・ジョンソンはJavaの世界を変えた巨匠となった。
1.3 スプリングの役割
-
IOCの考え便利な分離と簡素化された開発: Spring は、すべてのオブジェクトの作成と Spring コンテナーへの依存関係のメンテナンスを管理できる大きなファクトリーです。
-
AOPプログラミング(アスペクト指向プログラミング)のサポート: Springではプログラムのパーミッション傍受や動作監視などの機能を簡単に実装できるアスペクト指向プログラミングを提供しています!
-
宣言的トランザクションのサポート: SSM SSS SSH を手動でプログラミングする必要がなく、構成を通じてトランザクション管理を完了するだけで済みます。
-
便利なプログラム テスト: Spring は Junit4 をサポートしており、Spring プログラムはアノテーションを通じて簡単にテストできます。
春のテスト: 春のテストモジュール! -
さまざまな優れたフレームワークの便利な統合: Spring はさまざまな優れたオープンソース フレームワークを排除せず、さまざまな優れたフレームワーク (Struts2、Hibernate、MyBatis、Quartz (時間指定タスク) など) を直接サポートします。
Spring フレームワークは、他のフレームワーク (MyBatis、Hibernate、Redis、Activiti、SpringMVC、SpringDATA) をシームレスに統合できます。。。
フレームワークである限り、Spring で管理できます。 -
JavaEE API の使用の難しさを軽減する: Spring は、JavaEE 開発で使用するのが非常に難しい API (JDBC、JavaMail、リモート呼び出しなど) のパッケージ化を提供しており、これらの API の使用の難しさを大幅に軽減します。
1.4 春の構成
Spring フレームワークに含まれる機能は、およそ次のもので構成されます。20モジュール構成。これらのモジュールは、コア コンテナ、データ アクセス/統合、Web、AOP (アスペクト指向プログラミング)、デバイス、メッセージング、およびテストにグループ化されています。
2. スプリングの役割
Spring は、ビジネス ロジック層と他の層の間の結合問題を解決でき、また、インターフェイス指向プログラミングのアイデアをシステム全体で実行できるようにするフレームワークの接着剤でもあります。特徴: 高凝集性、低結合性、デザイン層フレームワーク!
2.1 IOC のアイデア、AOP プログラミング、宣言型トランザクションのサポート、フレームワークと他のフレームワークとのシームレスな統合
2.1.1 春の環境構築
<!-- pom.xml的配置 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<!--以下是在resources中创建的applicationContext.xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--Spring AOP DI-->
<!--spring容器创建对象,也是通过构造方法创建的,默认创建对象的方式是通过无参构造,依赖注入靠set方法-->
<!--id是创建的对象的名字class表示对象是从Person这个类创建出来的-->
<!--id="p1"(大名只能取一个) name="(小名可以取多个)"-->
<!--scope(作用域属性):singleton单例 (默认)/prototype多例-->
<!--lazy-init属性 对象的创建时机的设置 值:true(懒加载:用时才创建)/false(一启动就创建)-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="singleton"
init-method="init" destroy-method="destroy">
<!--DI就是给对象附属性值-->
<property name="id" value="857"/>
<property name="name" value="吕布"/>
<property name="sex" value="男"/>
</bean>
<bean id="p2" name="person3,person4" class="com.swjd.bean.Person" scope="prototype" lazy-init="false">
<!--DI就是给对象附属性值-->
<property name="id" value="857"/>
<property name="name" value="貂蝉"/>
<property name="sex" value="女"/>
</bean>
<!--方式二:通过有参构造创建对象-->
<bean id="p3" class="com.swjd.bean.Person">
<constructor-arg index="0" type="int" value="859"/>
<constructor-arg index="1" type="java.lang.String" value="艾希"/>
<constructor-arg index="2" type="java.lang.String" value="女"/>
</bean>
<!--方式三:静态工厂-->
<bean id="p4" class="com.swjd.beanfactory.PersonFactory" factory-method="createFactory"/>
<!--方式四:通过非静态工厂创建对象-->
<bean id="factory" class="com.swjd.beanfactory.NoStaticFactory"/>
<bean id="p5" factory-bean="factory" factory-method="createFactory"/>
</beans>
2.1.2 IOC とは何ですか?
制御の反転, 呼び出し元のインスタンスの作成は呼び出し元自体によって作成されるのではなく、Spring コンテナーによって作成されるようになり、このプロセスによりインスタンス作成の制御がアプリケーション コードから外部コンテナーに移され、制御が変更されました。
2.1.3 DIとは何ですか?
依存関係の注入、オブジェクトに属性値を割り当てるには、必ず空の構築メソッドと get/set メソッドを保持してください。
2.1.4 Bean タグ内の 4 つの属性の役割:
(1) 1.Name 属性: オブジェクトに名前を付けます。同時に複数の名前を付けることができますが、異なるオブジェクトを繰り返すことはできません
(2) 2.Scope オブジェクトのスコープ属性:
- scope = "singleton" のデフォルト値。Spring コンテナによってデフォルトで作成されるオブジェクトはシングルトンです。
- scope="prototype" で作成されたオブジェクトは複数のインスタンスです (オブジェクトが使用されるたびに追加の新しいインスタンスが作成されます)
- scope="session" は、セッションのスコープ内で Spring コンテナ内のオブジェクトが 1 つを保持し、同じものを共有することを意味します。
- scope="request" は、リクエストのスコープ内で、Spring コンテナ内のオブジェクトが 1 つを保持し、同じものを共有することを意味します。
注: 後の 2 つは Web プロジェクトでのみ使用できます。
(3) オブジェクトの遅延作成 (scope = "singleton" の場合のみ有効) Lazy-init はオブジェクトのロード時間を示します (true: 遅延ロード (オブジェクト使用時に作成); false (Spring Framework の開始と同時にロード) )
(4) 4. オブジェクト作成後に呼び出されるメソッドとオブジェクト破棄後に呼び出されるメソッド
init-method="オブジェクト作成後に呼び出されるメソッド"
destroy-method="オブジェクト破棄後に呼び出されるメソッド」
2.1.5 春にオブジェクトを作成する 4 つの方法?
(1) 引数なしのコンストラクタで作成した場合
<!--方式1:无参构造方法创建对象-->
<bean id="p1" name="person1,person2" class="com.swjd.bean.Person" scope="singleton" lazy-init="true" init-method="init" destroy-method="destroy">
<property name="id" value="957"></property>
<property name="name" value="貂蝉"></property>
<property name="sex" value="女"></property>
</bean>
(2) パラメータ付きコンストラクタでオブジェクトを作成する
<!--方式2:用带参的构造方法创建对象-->
<bean id="p3" class="com.swjd.bean.Person">
<constructor-arg index="0" type="int" value="9528"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="德玛西亚"></constructor-arg>
<constructor-arg index="2" type="java.lang.String" value="男"></constructor-arg>
</bean>
(3) 静的ファクトリでオブジェクトを作成する
<!--方式3:用静态工厂创建对象-->
<bean id="p4" class="com.swjd.beanfactory.PersonFactory" factory-method="createPerson"></bean>
(4) 非静的ファクトリを使用してオブジェクトを作成する
<!--方式4:用非静态工厂创建对象-->
<bean id="noStaticfactory" class="com.swjd.beanfactory.NoStaticPersonFactory"></bean>
<bean id="p5" factory-bean="noStaticfactory" factory-method="createPerson"></bean>
2.1.6 Spring 依存関係注入の 4 つの方法?
(1). コールセットメソッドインジェクション
<bean id="m1" class="com.swjd.bean.Man">
<!--第一种:依赖注入的方式:set注入-->
<property name="id" value="1"/>
<property name="name" value="刘德华"/>
<property name="age" value="48"/>
<!-- <property name="dog" ref="d1"/>-->
<property name="dog">
<ref bean="d1"/>
</property>
</bean>
(2). パラメーターを指定してコンストラクター インジェクションを呼び出す
<bean id="m2" class="com.swjd.bean.Man">
<!--第二种:依赖注入的方式:带参的构造方法-->
<constructor-arg index="0" type="int" value="2"/>
<constructor-arg index="1" type="java.lang.String" value="蔡徐坤"/>
<constructor-arg index="2" type="int" value="20"/>
<constructor-arg index="3" type="com.swjd.bean.Dog" ref="d1"/>
</bean>
(3).P 名前空間インジェクション (本質は依然としてセットインジェクションであり、構文はより簡潔です)
<bean id="m3" class="com.swjd.bean.Man" p:id="3" p:name="八戒" p:age="108" p:dog-ref="d1"></bean>
(4).Spel表达式注入
<bean id="m4" class="com.swjd.bean.Man">
<property name="id" value="#{m1.id}"></property>
<property name="name" value="#{m2.name}"></property>
<property name="age" value="#{m3.age}"></property>
</bean>
基本タイプ
複合型の注入:
(1) 注入対象
(2) 配列を注入する
<property name="hobbies" >
<array>
<value>123</value>
<value>123</value>
</array>
</property>
(3) インジェクション回収
List:
<property name="subject">
<list>
<value>1234</value>
<value>1234</value>
</list>
</property>
Set:
<property name="boyFriends">
<set>
<value>12345</value>
<value>12345</value>
</set>
</property>
(4) インジェクションマップ
<property name="map">
<map>
<entry key="cn" value="中国"/>
<entry key="ru" value="俄罗斯"/>
</map>
</property>