Spring管理Bean-IOC-02
2.基于XML配置bean
2.7通过util空间名称创建list
BookStore.java:
package com.li.bean;
import java.util.List;
/**
* @author 李
* @version 1.0
*/
public class BookStore {
private List<String> bookList;
//如果类中没有其他构造器,默认构造器可以不写
// 如果有其他构造器,则必须显示定义无参构造器
public BookStore() {
}
public List<String> getBookList() {
return bookList;
}
public void setBookList(List<String> bookList) {
this.bookList = bookList;
}
@Override
public String toString() {
return "BookStore{" +
"bookList=" + bookList +
'}';
}
}
如果有多个BookStore对象,list的内容都一样,按照之前的做法,每一个list都要写上相同的value值。但使用util命名空间可以达到数据复用的效果:
beans.xml:
<!--定义util:list,并指定id,可以达到数据复用的效果-->
<util:list id="myBookList">
<value>三国演义</value>
<value>红楼梦</value>
<value>西游记</value>
<value>水浒传</value>
</util:list>
<!--配置BookStores对象-->
<bean class="com.li.bean.BookStore" id="bookStore">
<property name="bookList" ref="myBookList"/>
</bean>
注意引入util命名空间:
测试类:
//使用util:list名称空间给属性赋值
@Test
public void setBeanByUtilList() {
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
BookStore bookStore = ioc.getBean("bookStore", BookStore.class);
System.out.println("bookStore=" + bookStore);
}
2.8级联属性赋值
-
案例说明:spring的ioc容器,可以直接给对象属性的属性赋值,即级联属性赋值
-
完成步骤:
(1)创建Dept.java和Emp.java
(2)配置beans.xml
Dept.java:
package com.li.bean;
/**
* @author 李
* @version 1.0
* 部门类
*/
public class Dept {
private String name;
public Dept() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dept{" +
"name='" + name + '\'' +
'}';
}
}
Emp.java:
package com.li.bean;
/**
* @author 李
* @version 1.0
* 员工类
*/
public class Emp {
private String name;
private Dept dept;
public Emp() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", dept=" + dept +
'}';
}
}
beans.xml:
<!--配置Dept对象-->
<bean class="com.li.bean.Dept" id="dept"/>
<!--配置Emp对象-->
<bean class="com.li.bean.Emp" id="emp">
<property name="name" value="jack"/>
<property name="dept" ref="dept"/>
<!--这里我希望给dept的name属性赋值[级联属性赋值]-->
<property name="dept.name" value="Java开发部门"/>
</bean>
测试类:
//使用级联赋值给属性的属性赋值
@Test
public void setBeanByRelation() {
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
Emp emp = ioc.getBean("emp", Emp.class);
System.out.println("emp=" + emp);
}
2.9通过静态工厂获取对象
-
在spring的ioc容器,可以通过静态工厂获取bean对象
-
完成步骤:
(1)静态工厂类MyStaticFactory类和Monster类
(2)配置beans.xml
Monster类详见上一篇--2.1通过类型来获取bean
MyStaticFactory.java:
package com.li.factory;
import co