1つのsetterメソッドの注入
設定ファイルは以下の通りです:
<bean id="helloAction" class="org.yoo.action.SpringSetterHelloAction"> <!-- setter injection using the nested <ref/> element --> <property name="helloservice"><ref bean="helloService"/></property> <!--可以不设置类型 --> <property name="name" value="yoo"></property> </bean>
アクション実装クラスのコード:
private IHelloService helloservice;private String name ; public void sayHello(){helloservice.sayHello(); System.out.println(this.name);} public void setHelloservice(IHelloService helloservice) {this.helloservice = helloservice;} public void setName(String name) {this.name = name;}
ここでのnameとhelloserviceは属性のsetterメソッドを使用して注入されます。つまり、クラスにグローバル プロパティを設定し、コンテナ インジェクション用のプロパティのセッター メソッドを用意します。
2 コンストラクターインジェクション
spring は、コンストラクターインジェクション、つまり、一部のマテリアルでのコンストラクターまたはコンストラクターインジェクションもサポートしています。
最初に設定ファイルを確認します:
<!--普通构造器注入--> <bean id="helloAction" class="org.yoo.action.ConstructorHelloAction"> <!--type 必须为Java.lang.String 因为是按类型匹配的,不是按顺序匹配--> <constructor-arg type="java.lang.String" value="yoo"/> <!-- 也可以使用index来匹配--> <!--<constructor-arg index="1" value="42"/>--> <constructor-arg><ref bean="helloService"/> </constructor-arg> </bean>
アクション実装クラスのコード:
private HelloServiceImpl helloservice; private String name ; public SpringConstructorHelloAction(HelloServiceImpl helloservice,String name){this.helloservice = helloservice; this.name = name ;} @Overridepublic void sayHello() {helloservice.sayHello(); System.out.println(this.name);}
2 つの属性も設定し、コンストラクターに挿入します。
3つの静的ファクトリーインジェクション
設定ファイルは次のとおりです:
<!--静态工厂构造注入--> <!--注意这里的class 带factory-method参数--> <!--factory-method的值是FactoryHelloAction中的工厂方法名createInstance--> <bean id="helloAction" class="org.yoo.di.FactoryHelloAction" factory-method="createInstance"> <constructor-arg type="java.lang.String" value="yoo"/> <constructor-arg> <ref bean="helloService"/> </constructor-arg> </bean>
アクション実装クラス:
private HelloServiceImpl helloservice; private String name = null; private SpringFactoryHelloAction(String name ,HelloServiceImpl helloservice){this.helloservice = helloservice ; this.name = name ;} public static SpringFactoryHelloAction createInstance(String name ,HelloServiceImpl helloservice) {SpringFactoryHelloAction fha = new SpringFactoryHelloAction (name,helloservice); // some other operationsreturn fha;} @Overridepublic void sayHello() {helloservice.sayHello(); System.out.println(this.name);}
4つ目 設定ファイルのインジェクションなし(自動インジェクション)
上記の3つのメソッドはすべて設定を記述する必要がありますspring2 .5 では、設定ファイルを書かずに ioc 実装も提供します。構成ファイルが Bean 間の依存関係を参照しておらず、構成ファイルに基づいていないことは、Spring 構成ファイルが存在しないことを意味するものではないことに注意してください。
設定ファイルは次のとおりです:
<?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.php.cn/"> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> <bean id="helloService" class="org.yoo.service.HelloServiceImpl"> </bean> <bean id="helloAction" class="org.yoo.action.AutowiredHelloAction"> </bean> </beans>
上記では、helloService と helloAction の 2 つの Bean が設定されているだけであり、helloAction の helloService への依存関係は設定されていないことがわかります。
さらに、自動インジェクションをサポートするには、fe2d0bc69d3ad4c0f730834082f824d9 が必要です。
アクション実装クラス:
/* * 属性自动装载 */ /* @Autowired private HelloService helloservice; @Override public void sayHello() { helloservice.sayHello(); 。
上記のコードは非常に簡単で、属性に @Autowired アノテーションを追加すると、Spring が自動的に HelloService を挿入します。
は、次のように、コンストラクターとセッター メソッドの注入もサポートしています。
コンストラクターの自動注入:
/* * 还可以使用构造函数设置 */ @Autowired public SpringAutowiredHelloAction(HelloServiceImpl helloservice){ this.helloservice = helloservice; }
setter メソッドの自動注入:
/* * 也可以使用set方法设置 */ /* @Autowired public void setHelloservice(HelloService helloservice) { this.helloservice = helloservice; }
最後に、自動注入が使用されていない場合は、setter メソッドを使用してみてください。一般的には setter メソッドも使用されます。
自動インジェクションを使用するか設定ファイル方式を使用するかに関係なく、jdk が 1.5 未満または Spring が 2.5 でない場合は、設定ファイル方式のみを使用できます。残りは実際のプロジェクトの選択によって異なります。
上記は Spring Ioc 依存性注入のいくつかの方法の詳細な紹介です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。