spirng配置式注入方式
17061 ワード
Springには様々な依存注入の形式があり、以下ではspringがxmlを通じてIOC配置を行う方法のみを紹介する.
Set注入方式これは最も簡単な注入方式であり、クラスにSpringDaoオブジェクトをインスタンス化する必要があるSpringActionがあると仮定すると、privateのSpringDaoメンバー変数を定義し、SpringDaoのsetメソッド(iocの注入入口である):
package com.bless.springdemo.action;
public class SpringAction {
// springDao
private SpringDao springDao;
// set
public void setSpringDao(SpringDao springDao) {
this.springDao = springDao;
}
public void ok(){
springDao.ok();
}
}
次にspringのxmlファイルを作成します.nameプロパティはclassプロパティの別名です.classプロパティはクラスのフルネームを指します.SpringActionに共通プロパティSpringdaoがあるので、ラベルにラベル指定SpringDaoを作成します.
ラベルのnameはSpringActionクラスのSpringDao属性名で、refは以下を指します.
これは、SpringがSpringDaoImplオブジェクトをインスタンス化し、SpringActionを呼び出すsetSpringDaoメソッドがSpringDaoを注入することです.
1
2 <bean name="springAction" class="com.bless.springdemo.action.SpringAction">
3
4 <property name="springDao" ref="springDao">property>
5 bean>
6 <bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl">bean>
2、コンストラクタ注入この方式の注入とはパラメータ付きコンストラクタ注入のことで、次の例を見て、2つのメンバー変数SpringDaoとUserを作成しましたが、オブジェクトのsetメソッドは設定されていないので、第1の注入方式はサポートできません.ここでの注入方式はSpringActionのコンストラクタに注入されます.つまり、SpringActionオブジェクトの作成時にSpringDaoとUserの2つのパラメータ値を入力します.
public class SpringAction {
// springDao
private SpringDao springDao;
private User user;
public SpringAction(SpringDao springDao,User user){
this.springDao = springDao;
this.user = user;
System.out.println(" springDao user");
}
public void save(){
user.setName(" ");
springDao.save(user);
}
}
XMLファイルでは同じ形式ではなく、ラベルを使用します.refプロパティは他のラベルのnameプロパティを指します.
<bean name="springAction" class="com.bless.springdemo.action.SpringAction">
<constructor-arg ref="springDao">constructor-arg>
<constructor-arg ref="user">constructor-arg>
bean>
<bean name="springDao" class="com.bless.springdemo.dao.impl.SpringDaoImpl">bean>
<bean name="user" class="com.bless.springdemo.vo.User">bean>
コンストラクションメソッドパラメータの不確実性を解決するには、コンストラクションメソッドが入力する2つのパラメータが同じタイプであることに遭遇する可能性があります.対応する値を割り当てるには、indexを設定する必要があります.次に、パラメータの位置を設定します.
1 <bean name="springAction" class="com.bless.springdemo.action.SpringAction">
2 <constructor-arg index="0" ref="springDao">constructor-arg>
3 <constructor-arg index="1" ref="user">constructor-arg>
4 bean>
もう1つは、パラメータのタイプを設定することです.
1 <constructor-arg type="java.lang.String" ref=""/>
静的工場はその名の通り、静的工場を呼び出す方法で自分の必要なオブジェクトを取得し、springにすべてのオブジェクトを管理させるために、私たちは直接「エンジニアリングクラス」を通過することはできません.静的メソッド()はオブジェクトを取得しますが、spring注入の形式で取得します.
1 package com.bless.springdemo.factory;
2
3 import com.bless.springdemo.dao.FactoryDao;
4 import com.bless.springdemo.dao.impl.FactoryDaoImpl;
5 import com.bless.springdemo.dao.impl.StaticFacotryDaoImpl;
6
7 public class DaoFactory {
8 //
9 public static final FactoryDao getStaticFactoryDaoImpl(){
10 return new StaticFacotryDaoImpl();
11 }
12 }
同じように重要なクラスを見ると、ここではFactoryDaoオブジェクトを注入する必要があります.ここでは最初の注入とそっくりに見えますが、その後のxmlを見ると大きな違いがあります.
1 public class SpringAction {
2 //
3 private FactoryDao staticFactoryDao;
4
5 public void staticFactoryOk(){
6 staticFactoryDao.saveFactory();
7 }
8 // set
9 public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
10 this.staticFactoryDao = staticFactoryDao;
11 }
12 }
Spring IOC , <bean name="staticFactoryDao"> class FactoryDao , DaoFactory, factory-method="getStaticFactoryDaoImpl" :
1
2 <bean name="springAction" class="com.bless.springdemo.action.SpringAction" >
3
4 <property name="staticFactoryDao" ref="staticFactoryDao">property>
5 property>
6 bean>
7
8 <bean name="staticFactoryDao" class="com.bless.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl">bean>
インスタンス・ファクトリとは、オブジェクト・インスタンスを取得する方法が静的ではないことを意味します.まずnewファクトリ・クラスを呼び出し、通常のインスタンス・メソッドを呼び出す必要があります.
1 public class DaoFactory {
2 //
3 public FactoryDao getFactoryDaoImpl(){
4 return new FactoryDaoImpl();
5 }
6 }
では、次のクラスは何も言っていません.前にも似ていますが、インスタンスファクトリクラスを使用してFactoryDaoオブジェクトを作成する必要があります.
1 public class SpringAction {
2 //
3 private FactoryDao factoryDao;
4
5 public void factoryOk(){
6 factoryDao.saveFactory();
7 }
8
9 public void setFactoryDao(FactoryDao factoryDao) {
10 this.factoryDao = factoryDao;
11 }
12 }
最後にspringプロファイルを見ます.
1
2 <bean name="springAction" class="com.bless.springdemo.action.SpringAction">
3
4 <property name="factoryDao" ref="factoryDao">property>
5 bean>
6
7
8 <bean name="daoFactory" class="com.bless.springdemo.factory.DaoFactory">bean>
9 <bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl">bean>
Spring IOC注入方式が最も多く使われているのは(1)(2)種類で、たくさん練習してくれてありがとうございます.また、Springによって作成されたオブジェクトのデフォルトは単一です.複数インスタンスオブジェクトを作成する必要がある場合は、ラベルの後ろに属性を追加できます.
"..." class="..." scope="prototype">