Spring IOC (DI) 依赖注入的四种方式示例详解
作者:清潇和梨花
这篇文章主要介绍了Spring IOC (DI) 依赖注入的四种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
依赖注入的四种方式:
set 注入
赋值,默认使用的是set() 方法,依赖注入底层是通过反射实现的
<bean id="student" class="cust.zaw.entity.Student"> <property name="stuName" value="lc"></property> </bean>
构造器注入
使用构造方法注入
<bean id="student" class="cust.zaw.entity.Student"> 参数顺序相同的话,可以不写index <constructor-arg value=""></constructor-arg> 参数顺序不同的话,写index或者name或者type <constructor-arg value="" index=“0”></constructor-arg> <constructor-arg value="" index=“1”></constructor-arg> <constructor-arg value="" name=“”></constructor-arg> <constructor-arg value="" type=“”></constructor-arg> </bean>
p命名空间注入
引入命名空间就是加一句话:xmlns:p=“http://www.springframework.org/schema/p”
也可以这样引入,它会自动引入命名空间
引入命名空间后,就可以这样以这样的方式实现依赖注入
<bean id="student" class="cust.zaw.entity.Student" p:stuAge="" p:stuName="" p:stuNO-ref=""> </bean>
- 注意:
无论是String 还是int / short / long ,在赋值时都是value=“值”,因此建议 配合type / name 进行区分
- IOC 容器赋值:
简单类型,value=“”对象类型(当一个类中有其他类 类型,为其赋值时使用),ref=“需要引用的id值”
注入各种集合数据类型
List Set Map properties
写一个实体类
package cust.zaw.entity; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class AllCollectionType { private List<String> list; private String[] array; private Set<String> set; private Map<String,String> map; private Properties props; public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public String[] getArray() { return array; } public void setArray(String[] array) { this.array = array; } public Set<String> getSet() { return set; } public void setSet(Set<String> set) { this.set = set; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } @Override public String toString() { String strContent=null; for(String str : array) { strContent +=str + ","; } return "AllCollectionType [getList()=" + getList() + ", getArray()=" + Arrays.toString(getArray()) + ", getSet()=" + getSet() + ", getMap()=" + getMap() + ", getProps()=" + getProps() + "]"+strContent; } }
编写配置文件
<bean id="collectionDemo" class="cust.zaw.entity.AllCollectionType"> <property name="list"> <list> <value>足球</value> <value>篮球</value> <value>乒乓球</value> </list> </property> <property name="array"> <array> <value>足球1</value> <value>篮球1</value> <value>乒乓球1</value> </array> </property> <property name="set"> <set> <value>足球2</value> <value>篮球2</value> <value>乒乓球2</value> </set> </property> <property name="map"> <map> <entry> <key> <value>football3</value> </key> <value>足球3</value> </entry> <entry> <key> <value>basketball3</value> </key> <value>篮球3</value> </entry> <entry> <key> <value>ppq3</value> </key> <value>乒乓球3</value> </entry> </map> </property> <property name="props"> <props> <prop key="football4">足球4</prop> <prop key="baskball4">篮球4</prop> <prop key="pp4">乒乓球4</prop> </props> </property> </bean>
获取输出
public static void collectionDemp() { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); AllCollectionType type=(AllCollectionType)context.getBean("collectionDemo"); System.out.println(type); }
给对象类型赋值null:
<!-- 注意没有<value> --> <property name="name"> <null/> </property>
赋空值
<property name="name"> <value></value> </property>
自动装配注入(只适用于 ref 类型):
约定优于配置
- byName:自动寻找:其他bean的id值 = 该Course类的属性名
- byType:其他类型(class)是否与该Course类的ref 属性类型一致
- (必须满足当前ioc容器只有一个bean满足)
- constructor:其他bean的类型(class)是否与该Course 类的构造方法参数 的类型一致;
<!-- autowire="byName" Course类中有一个ref属性teacher(属性名),并且该ioc容器中恰好有一个 bean的id也是teacher bean的id=类的属性名 --> <bean id="student" class="cust.zaw.entity.Student" autowire="byName"> <property name="stuNO" value="2"></property> <property name="stuName" value="lc"></property> <property name="stuAge" value="24"></property> <!-- <property name="teacher" ref="teacher"></property>--> </bean>
可以在头文件中,一次性将ioc容器的所有bean 统一设置成自动装配自动装配虽然可以减少代码量,但是会降低程序可读性
<beans xmlns="http://www.springframework.org/schema/beans" .... default-autowire="byName">
到此这篇关于Spring IOC (DI) 依赖注入的四种方式的文章就介绍到这了,更多相关Spring IOC依赖注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!