对于类成员变量,注入方式有三种:
1.构造函数注入
2.属性setter方法的属性注入
3.接口注入方式
Spring支持前两种方式
构造方法的属性注入
通过构造方法注入Bean的属性值或依赖的对象,保证了Bean实例在是实例化后就可以使用。
构造器注入在 < constructor-arg> 元素里声明
public class User { private String name; private String age; public User(String name, String age) { this.name = name; this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age='" + age + '\'' + '}'; } }xml中
<bean id="user" class="com.imoo.ioc.demo4.User"> <constructor-arg name="name" value="zhangsan"/> <constructor-arg name="age" value="23"/> </bean>测试类中
public class SpringDemo4 { @Test public void demo1() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User)applicationContext.getBean("user"); System.out.println(user); } }set方法注入(更倾向用这种方式)
在配置文件中,使用< property>标签,设置注入的属性
<bean id="person" class="com.imoo.ioc.demo4.Person"> <property name="name" value="lisi"/> <property name="age" value="32"/> </bean>
对于对象类型的属性注入
先写一个Cat的class类,并添加set get方法
在配置文件中,先添加cat的bean,然后在person的bean中注入cat的属性。
值添加使用的的ref而不是value
<bean id="person" class="com.imoo.ioc.demo4.Person">
<property name="name" value="lisi"/>
<property name="age" value="32"/>
<property name="cat" ref="cat"/>
</bean>
<bean id="cat" class="com.imoo.ioc.demo4.Cat">
<property name="name" value="ketty"/>
</bean>
普通类型的值用value ,对象类型的值用ref
p名称空间的属性注入
- 为了简化xml文件配置,Spring从2.5开始引入一个新的p名称空间
- p:< 属性名> = "xxx" 引入常量值
- p:< 属性名> - ref = "xxx" 引入其他Bean对象
-先配置xml :xmlns:p="http://www.springframework.org/schema/p"
<bean id="person" class="com.imoo.ioc.demo4.Person" p:name="大黄" p:age="32"p:cat-ref="cat"/>
<bean id="cat" class="com.imoo.ioc.demo4.Cat" p:name="小黄"/>SpEL注入
- SpEL:spring expression language,spring表达式语言,对依赖注入进行简化
- 属性注入比较复杂的时候使用
- 语法: #{表达式}
- < bean id="" value = "#{表达式} >
复杂类型的属性注入
<!--复杂类型的属性注入-->
<bean id="collectionBean" class="com.imoo.ioc.demo5.CollectionBean">
<property name="arrs">
<list>
<value>aaa</value>
<value>bbb</value>
</list>
</property>
<property name="list">
<list>
<value>111</value>
<value>222</value>
</list>
</property>
<property name="set">
<set>
<value>ddd</value>
<value>eee</value>
<value>fff</value>
</set>
</property>
<property name="map">
<map>
<entry key="aaa" value="111"></entry>
<entry key="bbb" value="222"></entry>
<entry key="ccc" value="333"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">root</prop>
</props>
</property>
</bean>


京公网安备 11010502036488号