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代表构造方法中的第一个参数,例如:
2.setter方法注入
要求:(1)bean必须提供无参构造方法
(2)要赋值的属性必须提供setter方法
(3)配置文件配置方式,如:
3.特殊注入
要求:(1)如果bean中有List,Map,Set,Properties属性,配置文件中赋值方式分别如下:
<1>List和数组
<2>Map
<3>Properties
<4>Set
(2)如果bean中的属性是另外一个bean的对象那么用ref 属性指向那个bean对象的id属性,例如:
1、构造器注入
Bean:
配置文件:
具体应用:
2、setter方法注入
(注意,使用setter方式依赖注入,bean必须提供系统默认无参构造器)
Bean:
配置文件:
具体应用:
3、List注入
Bean:
配置文件:
具体应用:
4、Map注入
Bean:
配置文件:
具体应用:
5、Properties注入
Bean:
配置文件:
具体应用:
6、Set注入
Bean:
配置文件:
具体应用:
大致分为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 ); } }
相关文章推荐
- 依赖注入(Ioc)的3种实现方式
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- 实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1)
- 初识Spring框架实现IOC和DI(依赖注入)
- php 实现DI(依赖注入)和 IOC(控制反转)(1)
- php 实现DI(依赖注入)和 IOC(控制反转)(2)
- [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)
- Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现
- Spring中的IOC(一):什么是IOC及Spring中实现IOC的方式(依赖注入)
- spring 框架中的依赖注入(IOC--设值注入)---使用xml简单配置文件---的具体实例的简单实现
- 依赖注入(DI)和控制反转(IOC)的详细讲解 spring容器(spring注解实现,而不是xml配置文件)
- spring 框架中的依赖注入(IOC--设值注入)--使用注解--的具体实例的简单实现
- 用PHP实现简单的控制反转(IOC) 依赖注入(DI),用JSON配置文件
- Spring中实现IOC的方式:依赖注入(Dependency Injection)
- spring2.5 之 编码实现 IOC和依赖注入
- Cocos2d-X 简单画图的具体实现
- wpa_supplicant 的初始化&&浅析ethx网卡控制函数ioctl实现具体流程
- asp.net中C#获取字符串中汉字的个数的具体实现方法
- java之IOC原理理解和框架实现
- Java Condition 的await(), singal(), singalAll() 具体代码实现分析,