控制反轉 Type1IoC,Type2IoC和Type3IoC
Type1IoC就是Interface Injection,使用Type1 IoC的時候要求實現接口,對象所在的容器也會使用這個接口.容器同事知道這個接口上所規定的方法,所以可呼叫實現接口的對象來完成依賴關系注射.
如 容器的API申明了 一個IDependency接口

IDependency.java

public interface IDependency
{
public void createDependecy(Map depend);
}
接著我們讓Business 類實現這個接口

Business.java

public class Business implements IDependency
{
private Map dependObjects;

public void createDependency(Map dobject)
{
this.dependObjects=dobject;
//something another code
}

}
這樣如果要實現依賴關系注入的對象,必須實現IDependency接口.并將其讓容器管理,由于Business實現了容器所規定的接口,這樣就使得Business依賴于容器的API.如果以后要獨立出來,那么就必須修改代碼了.所以Type1IoC有較強的入侵性,使用它來實現注射.會使得應用程序或組件依賴容器.因而降低了重用性.
所以Spring 推薦 Type2IoC 其實就是Setter Injection.寫一個Bean

HelloBean.java
package kafei.time;


public class HelloBean
{
private String helloWord;

public void setHelloWord(String helloWord)
{
this.helloWord = helloWord;
}

public String getHelloWord()
{
return helloWord;
}
}
配置Spring文件

beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="helloBean"
class="kafei.time.HelloBean">
<property name="helloWord">
<value>Hello!Justin!</value>
</property>
</bean>
</beans>
下面寫一個簡單的測試文件

SpringDemo.java
package kafei.time;

import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;


public class SpringDemo
{

public static void main(String[] args)
{
Resource rs =
new FileSystemResource("beans.xml");
BeanFactory factory =
new XmlBeanFactory(rs);
HelloBean hello =
(kafei.time.HelloBean) factory.getBean("helloBean");
System.out.println(hello.getHelloWord());
}
}
這就是一個Type2IoC,以后要改變輸出的內容只要在配置文件中修改一下就可以了.
Type3IoC 是Construtor Injection這個Spring也支持

HelloBean.java
package kafei.time;


public class HelloBean
{
private String name;
private String helloWord;

// 建議有要無參數建構方法

public HelloBean()
{
}

public HelloBean(String name, String helloWord)
{
this.name = name;
this.helloWord = helloWord;
}

public void setName(String name)
{
this.name = name;
}

public String getName()
{
return name;
}


public void setHelloWord(String helloWord)
{
this.helloWord = helloWord;
}

public String getHelloWord()
{
return helloWord;
}
}
配置spring文件

beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="helloBean"
class="kafei.time.HelloBean">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
</beans>

有多個參數的話,用index來指定位置,第一個參數索引值為0,第二個是1,依次類推
測試文件和上面一個差不多沒有什么區別為了節省篇幅就不寫了.
這是我初學spring的一些文章.個人認為還是Type2IoC好用,不過對于一些第一次注射后不能在修改的如DAO注射,使用Type3也可以.
上面的例子還是在spring1.28環境下的.如果要到2.0環境,請各位自己修改.
隔幾天寫一個關于spring 屬性參考的文章,
如 容器的API申明了 一個IDependency接口







接著我們讓Business 類實現這個接口














這樣如果要實現依賴關系注入的對象,必須實現IDependency接口.并將其讓容器管理,由于Business實現了容器所規定的接口,這樣就使得Business依賴于容器的API.如果以后要獨立出來,那么就必須修改代碼了.所以Type1IoC有較強的入侵性,使用它來實現注射.會使得應用程序或組件依賴容器.因而降低了重用性.
所以Spring 推薦 Type2IoC 其實就是Setter Injection.寫一個Bean




















配置Spring文件














下面寫一個簡單的測試文件

























這就是一個Type2IoC,以后要改變輸出的內容只要在配置文件中修改一下就可以了.
Type3IoC 是Construtor Injection這個Spring也支持














































配置spring文件


















有多個參數的話,用index來指定位置,第一個參數索引值為0,第二個是1,依次類推
測試文件和上面一個差不多沒有什么區別為了節省篇幅就不寫了.
這是我初學spring的一些文章.個人認為還是Type2IoC好用,不過對于一些第一次注射后不能在修改的如DAO注射,使用Type3也可以.
上面的例子還是在spring1.28環境下的.如果要到2.0環境,請各位自己修改.
隔幾天寫一個關于spring 屬性參考的文章,
posted on 2007-05-29 18:45 ronghai 閱讀(1112) 評論(0) 編輯 收藏 所屬分類: java新手學習