您的位置:首页 > 其它

IOC(依赖注入)具体实现

2012-02-28 09:25 323 查看
From http://easy115.com/2012/01/05/spring%E7%94%A8%E6%B3%95%E5%B0%8F%E7%BB%93-ioc%E4%BB%A5%E6%9D%A5%E6%B3%A8%E5%85%A5%E5%85%B7%E4%BD%93%E6%97%B6%E9%97%B4.html
大致分为3种注入方式:

1.构造器注入

要求:(1)bean必须提供附带属性的构造方法

(2)配置文件中构造方法标签名constructor-arg ,属性名index="0",0代表构造方法中的第一个参数,例如:

<constructor-arg index="0">
<value>Janet</value>
</constructor-arg>


2.setter方法注入

要求:(1)bean必须提供无参构造方法

(2)要赋值的属性必须提供setter方法

(3)配置文件配置方式,如:

<property name="password">
<value>12345678</value>
</property>


3.特殊注入

要求:(1)如果bean中有List,Map,Set,Properties属性,配置文件中赋值方式分别如下:

<1>List和数组

<property name="hobbyList">
<list>
<value>篮球</value>
<value>发财</value>
<value>泡MM</value>
</list>
</property>


<2>Map

<map>
<entry key="Eric">
<value>80</value>
</entry>
<entry key="Janet">
<value>60</value>
</entry>
<entry key="Jason">
<value>100</value>
</entry>
</map>


<3>Properties

<property name="attributeList">
<props>
<prop key="name">Jason</prop>
<prop key="hobby">足球</prop>
</props>
</property>


<4>Set

<property name="nameList">
<set>
<value>Eric</value>
<value>Janet</value>
<value>Coco</value>
</set>
</property>


(2)如果bean中的属性是另外一个bean的对象那么用ref 属性指向那个bean对象的id属性,例如:

<ref bean="date"/>


1、构造器注入

Bean:

public class User {
private String userName;
private String password;

public User( String userName, String password ) {
this.userName = userName;
this.password = password;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


配置文件:

<?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="userBean" class="ioc.constructor_injection.beans.User">
<constructor-arg index="0"> <value>Janet</value> </constructor-arg>
<constructor-arg index="1">
<value>88888888</value>
</constructor-arg>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext(
"./src/ioc/constructor_injection/config/config.xml");
// 取得一个实例
User user = (User) ac.getBean("userBean");
System.out.println( user.getUserName() + " - " + user.getPassword() );
}


2、setter方法注入

(注意,使用setter方式依赖注入,bean必须提供系统默认无参构造器)


Bean:

public class User {
private String userName;

private String password;

public User() {

}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}


配置文件:

<?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="userBean" class="ioc.setter_injection.beans.User">
<property name="userName">
<value>Eric</value>
</property>
<property name="password"> <value>12345678</value> </property>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(
"./src/ioc/setter_injection/config/config.xml");
User user = (User) ac.getBean("userBean");
System.out.println( user.getUserName() + " - " + user.getPassword() );
}


3、List注入

Bean:

public class User {
private List hobbyList = new Vector();

public List getHobbyList() {
return hobbyList;
}

public void setHobbyList(List hobbyList) {
this.hobbyList = hobbyList;
}
}


配置文件:

<?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="userBean" class="ioc.collection_injection.list_injection.beans.User">
<property name="hobbyList"> <list> <value>篮球</value> <value>发财</value> <value>泡MM</value> </list> </property>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(
"./src/ioc/collection_injection/list_injection/config/config.xml");
// 取得一个实例
User user = (User) ac.getBean("userBean");
List < String > hobbyList = user.getHobbyList();
for ( String hobby: hobbyList ) {
System.out.println( hobby );
}
}


4、Map注入

Bean:

public class User {
private Map nameList = new HashMap();

public Map getNameList() {
return nameList;
}

public void setNameList(Map nameList) {
this.nameList = nameList;
}
}


配置文件:

<?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="userBean" class="ioc.collection_injection.map_injection.beans.User">
<property name="nameList">
<map> <entry key="Eric"> <value>80</value> </entry> <entry key="Janet"> <value>60</value> </entry> <entry key="Jason"> <value>100</value> </entry> </map>
</property>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(        "./src/ioc/collection_injection/map_injection/config/config.xml");
// 取得一个实例
User user = (User) ac.getBean("userBean");
Map map = user.getNameList();
Object [] list = map.keySet().toArray();
for ( Object key: list ) {
String name = ( String )key;
String age = ( String )map.get( name );
System.out.println( name + " - " + age );
}
}


5、Properties注入

Bean:

public class User {
private Properties attributeList = new Properties();

public Properties getAttributeList() {
return attributeList;
}

public void setAttributeList(Properties attributeList) {
this.attributeList = attributeList;
}
}


配置文件:

<?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="userBean"
class="ioc.collection_injection.properties_injection.beans.User">
<property name="attributeList"> <props> <prop key="name">Jason</prop> <prop key="hobby">足球</prop> </props> </property>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(        "./src/ioc/collection_injection/properties_injection/config/config.xml");
// 取得一个实例
User user = (User) ac.getBean("userBean");
Properties p = user.getAttributeList();
System.out.println( p.get( "name" ) + " - " + p.getProperty( "hobby" ) );

}


6、Set注入

Bean:

public class User {
private Set nameList = new HashSet();

public Set getNameList() {
return nameList;
}

public void setNameList(Set nameList) {
this.nameList = nameList;
}
}


配置文件:

<?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="userBean" class="ioc.collection_injection.set_injection.beans.User">
<property name="nameList"> <set> <value>Eric</value> <value>Janet</value> <value>Coco</value> </set> </property>
</bean>
</beans>


具体应用:

public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(
"./src/ioc/collection_injection/set_injection/config/config.xml");
// 取得一个实例
User user = (User) ac.getBean("userBean");
Set < String > nameList = user.getNameList();
for ( String name: nameList ) {
System.out.println( name );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐