7.1属性依赖注入
依赖注入方式:手动装配 和 自动装配
手动装配:一般进行配置信息都采用手动 基于xml装配:构造方法、setter方法 基于注解装配:
自动装配:struts和spring 整合可以自动装配 byType:按类型装配 byName:按名称装配 constructor构造装配, auto: 不确定装配。
7.1.1构造方法
7.1.1.1目标类
public class User {
private Integer uid;
private String username;
private Integer age;
public User(Integer uid, String username) {
super();
this.uid = uid;
this.username = username;
}
public User(String username, Integer age) {
super();
this.username = username;
this.age = age;
}
7.1.1.2Spring配置
<!-- 构造方法注入
* <constructor-arg> 用于配置构造方法一个参数argument
name :参数的名称
value:设置普通数据
ref:引用数据,一般是另一个bean id值
index :参数的索引号,从
0开始 。如果只有索引,匹配到了多个构造方法时,默认使用第一个。
type :确定参数类型
例如:使用名称name
<constructor-arg name=
"username" value=
"jack"></constructor-arg>
<constructor-arg name=
"age" value=
"18"></constructor-arg>
例如
2:【类型
type 和 索引 index】
<constructor-arg index=
"0" type="java.lang.String" value=
"1"></constructor-arg>
<constructor-arg index=
"1" type="java.lang.Integer" value=
"2"></constructor-arg>
-->
<bean id=
"userId" class=
"com.itheima.f_xml.a_constructor.User" >
<constructor-arg index=
"0" type="java.lang.String" value=
"1"></constructor-arg>
<constructor-arg index=
"1" type="java.lang.Integer" value=
"2"></constructor-arg>
</bean>
7.2setter方法
<!
* 普通数据
<
property name=
"" value=
"值">
等效
<
property name=
"">
<value>值
* 引用数据
<
property name=
"" ref=
"另一个bean">
等效
<
property name=
"">
<
ref bean=
"另一个bean"/>
<bean
id=
"personId" class=
"com.itheima.f_xml.b_setter.Person">
<
property name=
"pname" value=
"阳志"></
property>
<
property name=
"age">
<value>
1234</value>
</
property>
<
property name=
"homeAddr" ref=
"homeAddrId"></
property>
<
property name=
"companyAddr">
<
ref bean=
"companyAddrId"/>
</
property>
</bean>
<bean
id=
"homeAddrId" class=
"com.itheima.f_xml.b_setter.Address">
<
property name=
"addr" value=
"阜南"></
property>
<
property name=
"tel" value=
"911"></
property>
</bean>
<bean
id=
"companyAddrId" class=
"com.itheima.f_xml.b_setter.Address">
<
property name=
"addr" value=
"北京八宝山"></
property>
<
property name=
"tel" value=
"120"></
property>
</bean>
7.3P命名空间【了解】
对“setter方法注入”进行简化,替换,而是在
<bean p:属性名=
"普通值" p:属性名-
ref=
"引用值">
p命名空间使用前提,必须添加命名空间
<bean
id=
"personId" class=
"com.itheima.f_xml.c_p.Person"
p:pname=
"禹太璞" p:age=
"22"
p:homeAddr-
ref=
"homeAddrId" p:companyAddr-
ref=
"companyAddrId">
</bean>
<bean
id=
"homeAddrId" class=
"com.itheima.f_xml.c_p.Address"
p:addr=
"DG" p:tel=
"东莞">
</bean>
<bean
id=
"companyAddrId" class=
"com.itheima.f_xml.c_p.Address"
p:addr=
"DG" p:tel=
"岛国">
</bean>
7.4SpEL【了解】
<property name=
"" value=
"#{表达式}">
#{123}、#{'jack'} : 数字、字符串
#{beanId} :另一个bean引用
#{beanId.propName} :操作数据
#{beanId.toString()} :执行方法
#{T(类).字段|方法} :静态方法或字段
<!
<
property name=
"cname" value=
"#{'jack'}"></
property>
<
property name=
"cname" value=
"#{customerId.cname.toUpperCase()}"></
property>
通过另一个bean,获得属性,调用的方法
<
property name=
"cname" value=
"#{customerId.cname?.toUpperCase()}"></
property>
?. 如果对象不为null,将调用方法
<bean
id=
"customerId" class=
"com.itheima.f_xml.d_spel.Customer" >
<
property name=
"cname" value=
"#{customerId.cname?.toUpperCase()}"></
property>
<
property name=
"pi" value=
"#{T(java.lang.Math).PI}"></
property>
</bean>
扩展阅读:Spring表达式语言
7.5集合注入
<bean id="collDataId" class="com.itheima.f_xml.e_coll.CollData" >
<property name="arrayData">
<array>
<value>ZS
</value>
<value>LS
</value>
<value>张三
</value>
<value>李四
</value>
</array>
</property>
<property name="listData">
<list>
<value>赵二
</value>
<value>王五
</value>
<value>吴六
</value>
<value>周七
</value>
</list>
</property>
<property name="setData">
<set>
<value>武则天
</value>
<value>秦始皇
</value>
<value>汉武帝
</value>
</set>
</property>
<property name="mapData">
<map>
<entry key="jack" value="杰克"></entry>
<entry>
<key><value>rose
</value></key>
<value>肉丝
</value>
</entry>
</map>
</property>
<property name="propsData">
<props>
<prop key="小王">王五
</prop>
<prop key="小张">张三
</prop>
<prop key="小李">李四
</prop>
</props>
</property>
</bean>