コンテンツ
3.Spring構成ファイル
3.1Beanタグの基本構成
構成オブジェクトはSpringによって作成されます。
デフォルトでは、クラス内の引数なしのコンストラクターを呼び出します。引数なしのコンストラクターがない場合は、正常に作成できません。
基本的なプロパティ:
- id:Springコンテナ内のBeanインスタンスの一意の識別子
- クラス:Beanの完全修飾名
3.2Beanタグスコープの構成
スコープ:オブジェクトのスコープを指し、値は次のとおりです:
範囲 |
説明する |
シングルトン |
デフォルト、シングルトン |
プロトタイプ |
多例的 |
リクエスト |
WEBプロジェクトでは、SpringはBeanオブジェクトを作成し、そのオブジェクトをリクエストフィールドに格納します |
セッション |
WEBプロジェクトでは、SpringはBeanオブジェクトを作成し、そのオブジェクトをセッションドメインに保存します |
グローバルセッション |
WEBプロジェクトでは、ポートレット環境に適用されます。ポートレット環境がない場合、globalSessionはセッションと同等です。 |
1)スコープの値がシングルトンの場合
Beanのインスタンス化の数:1
Beanのインスタンス化のタイミング:Springコアファイルがロードされたら、構成されたBeanインスタンスをインスタンス化します
Beanのライフサイクル:
- オブジェクトの作成:アプリケーションが読み込まれ、コンテナが作成されると、オブジェクトが作成されます
- オブジェクトの実行:コンテナが存在する限り、オブジェクトは生きています
- オブジェクトの破棄:アプリケーションがアンインストールされ、コンテナーが破棄されると、オブジェクトが破棄されます
2)スコープの値がプロトタイプの場合
Beanのインスタンス化の数:複数
Beanのインスタンス化のタイミング:getBean()メソッドが呼び出されたときにBeanがインスタンス化されます
- オブジェクトの作成:オブジェクトを使用する場合は、新しいオブジェクトインスタンスを作成します
- オブジェクトの実行:オブジェクトが使用されている限り、オブジェクトは存続します
- オブジェクトの破棄:オブジェクトが長期間使用されない場合、Javaのガベージコレクターによって再利用されます
3.3Beanのライフサイクル構成
- init-method:クラスの初期化メソッドの名前を指定します
- destroy-method:指定されたクラスのdestroyメソッドの名前
3.4Beanインスタンス化の3つの方法
1 )引数なしのコンストラクターを使用してインスタンス化します
デフォルトの引数なしコンストラクターに従ってクラスオブジェクトを作成します。Beanに引数なしデフォルトのコンストラクターがない場合、作成は失敗します。
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>
2)ファクトリ静的メソッドのインスタンス化
ファクトリの静的メソッドはBeanインスタンスを返します
ファクトリクラスを作成する
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="userDao" class="com.project.factory.StaticFactoryBean"
factory-method="createUserDao" />
3 )ファクトリは、ファクトリの非静的メソッドをインスタンス化してBeanインスタンスを返します
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="factoryBean" class="com.project.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
3.5Bean依存性注入の開始
①UserServiceを作成します。UserServiceは内部でUserDaoのsave()メソッドを呼び出します
public class UserServiceImpl implements UserService {
@Override public void save() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
②SpringにUserServiceImplを作成する権利を与える
<bean id="userService" class="com.project.service.impl.UserServiceImpl"/>
③SpringコンテナからUserServiceを取得して操作する
<bean id="userService" class="com.project.service.impl.UserServiceImpl"/>
3.6Beanの依存性注入分析
現在、 UserServiceインスタンスとUserDaoインスタンスの両方がSpringコンテナに存在します。現在の方法では、コンテナの外部でUserServiceインスタンスとUserDaoインスタンスを取得し、それらをプログラムで結合します。
UserServiceとUserDaoはどちらもSpringコンテナーにあり、最終的なプログラムはUserServiceを直接使用するため、SpringコンテナーのUserService内にUserDaoを設定できます。
3.7Beanの依存性注入の概念
依存性注入(依存性注入):これは、SpringフレームワークのコアIOCの具体的な実装です。
プログラムを書くとき、制御の反転によってオブジェクトの作成はSpringに渡されますが、コードに依存関係を持たせることは不可能です。
IOCデカップリングは、依存関係を減らすだけで、それらを排除するわけではありません。例:ビジネスレイヤーは引き続き永続レイヤーのメソッドを呼び出します。
ビジネス層と永続層の間の依存関係は、Springを使用した後もSpringによって維持されます。
簡単に言えば、フレームワークが永続層オブジェクトを自分で取得するのではなく、ビジネス層に渡すのを待つことです。
3.8Beanの依存性注入方法
UserDaoをUserServiceに注入する方法は?
1.工法
2.setメソッド
1)セットメソッド注入
UserServiceImplにsetUserDaoメソッドを追加します
public class UserServiceImpl implements UserService { private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
インジェクションのsetメソッドを呼び出すようにSpringコンテナを構成します
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.project.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
P名前空間インジェクションの本質もsetメソッドインジェクションですが、主に構成ファイルに反映される上記のsetメソッドインジェクションよりも便利です。まず、P名前空間を導入する必要があります。
xmlns:p="http://www.springframework.org/schema/p"
第二に、注入方法を変更する必要があります
<bean id="userService" class="com.project.service.impl.UserServiceImpl" p:userDaoref="userDao"/>
2)コンストラクタインジェクションはパラメータ化された構造を作成します
public class UserServiceImpl implements UserService {
@Override public void save() {
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao");
userDao.save();
}
}
パラメータ化された構造を呼び出すときに注入するようにSpringコンテナを構成します
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.project.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
3.9Bean依存性注入のデータ型
上記の操作はすべて注入された参照Beanです。オブジェクトの参照を注入できます。一般的なデータ型、コレクションなどをコンテナに注入できます。
データを注入するための3つのデータ型
- 一般的なデータ型
- 参照データ型コレクションデータ型
参照データ型はここでは繰り返されません。前の操作はすべてUserDaoオブジェクトの参照に挿入されます。以下では、一般的なデータ型と収集データ型の挿入を示す例として、setメソッドの挿入を取り上げます。
1)一般的なデータ型の注入
public class UserDaoImpl implements UserDao { private String company; private int age;
public void setCompany(String company) {
this.company = company;
}
public void setAge(int age) {
this.age = age;
} public void save() {
System.out.println(company+"==="+age);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">
<property name="company" value="小明"></property>
<property name="age" value="15"></property>
</bean>
2)コレクションデータ型の挿入( List <String> )
public class UserDaoImpl implements UserDao { private List<String> strList;
public void setStrList(List<String> strList) {
this.strList = strList;
}
public void save() {
System.out.println(strList);
System.out.println("UserDao save method running....");
}
}
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value> <value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
4)コレクションデータ型の挿入( Map <String、User> )
public class UserDaoImpl implements UserDao { private Map<String,User> userMap;
public void setUserMap(Map<String, User> userMap) {
this.userMap = userMap;
}
public void save() {
System.out.println(userMap);
System.out.println("UserDao save method running....");
}
}
<bean id="u1" class="com.project.domain.User"/> <bean id="u2" class="com.project.domain.User"/>
<bean id="userDao" class="com.project.dao.impl.UserDaoImpl">
<property name="userMap">
<map>
<entry key="user1" value-ref="u1"/>
<entry key="user2" value-ref="u2"/>
</map>
</property>
</bean>
3.10その他の設定ファイルの紹介(モジュールによる開発)
実際の開発では、Springには多くの構成コンテンツが含まれているため、Spring構成は非常に複雑でかさばります。したがって、構成の一部を他の構成ファイルに分解し、Springメイン構成ファイルをインポートタグを介してロードできます。
<import resource="applicationContext-xxx.xml"/>
知識ポイント
スプリングキー構成
<bean>タグ
id属性:コンテナ内のBeanインスタンスの一意の識別子。繰り返しは許可されません。クラス属性:インスタンス化されるBeanの完全修飾名スコープ属性:一般的に使用されるBeanのスコープは、シングルトン(デフォルト)とプロトタイプです。
<property>タグ:プロパティインジェクション名プロパティ:プロパティ名値プロパティ:注入された通常のプロパティ値refプロパティ:注入されたオブジェクト参照値
<リスト>タグ
<マップ>タグ
<プロパティ>タグ
<constructor-arg>タグ
<import>タグ:他のSpringサブファイルをインポートします