1、项目清单
2、代码
3、结果
4、笔记
1、项目清单 2、代码- Department类代码
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Department {
String name;
String[] empName;
List empList;
Set proarrys;
Map Info;
public Department() {
System.out.println("这是第一题的无参构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getEmpName() {
return empName;
}
public void setEmpName(String[] empName) {
this.empName = empName;
}
public List getEmpList() {
return empList;
}
public void setEmpList(List empList) {
this.empList = empList;
}
public Set getProarrys() {
return proarrys;
}
public void setProarrys(Set proarrys) {
this.proarrys = proarrys;
}
public Map getInfo() {
return Info;
}
public void setInfo(Map info) {
Info = info;
}
public Department(String n,String[] e,List el, Set p,Map i) {
this.name=n;
this.empName=e;
this.empList=el;
this.proarrys=p;
this.Info=i;
}
public String toString() {
String s="name="+name+"nempName="+Arrays.toString(empName)+"nEmployeename=";
for(Employee e:empList)
{
s=s+" "+e.getEmployeename();
}
s=s+""+"nProarryname=";
for(Project p:proarrys) {
s=s+" "+p.getProarryname();
}
return s+"ninfo="+Info;
}
}
- departmentfactory类代码
public class departmentfactory {
public static Department createBean1() {
// Department d =new Department();
return new Department();
}
}
- Project类代码
public class Project {
String Proarryname;
public String getProarryname() {
return Proarryname;
}
public void setProarryname(String proarryname) {
Proarryname = proarryname;
}
}
- Employee类代码
public class Employee {
String Employeename;
public String getEmployeename() {
return Employeename;
}
public void setEmployeename(String employeename) {
Employeename = employeename;
}
}
- applicationContext .xml代码
张十三 刘洛夫 李圣杰斯
- test类代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class test {
public static void main(String[] args) {
ApplicationContext context=new FileSystemXmlApplicationContext("src/applicationContext.xml");
Department d2=(Department) context.getBean("d2");
System.out.println(d2.toString());
}
}
3、结果
4、笔记
departmentfactory类只是用另一种方式来实例化Department类,以前是直接由xml文件来实例化(构造方法实例化),现在是通过实例化departmentfactory类然后调用里面的createBean1()方法来为Department实例化对象,createBean1()方法的返回值是Department类,return的是new Department(),此处就是在createBean1()方法实例化一个Department对象然后再返回Department类。它的原理很简单,就是多了一个中间商,这种方法的名字叫做静态工厂实例化,createBean1()经过static修饰它不再是departmentfactory对象的方法,也就是说调用此方法不需要依赖对象来进行访问,而是只要类被加载了就可以通过类名直接调用。此处的List empList和Set proarrys的类型都不是普通的类型,是一个类。所以它的赋值有点不一样,分别创建Employee和Project类并定义属性,然后再xml文件中bean(实例化对象)并赋值。Department类中定义了一系列属性,同时定义一个有参构造方法方便在xml文件中赋值。还要定义一个toString()方法来输出,输出过程中因为List empList和Set proarrys不一样,所以获取其值需要分别用一个for循环来从数组、列表中逐一获取值(该for和foreach使用方法类似)。xml文件中分别为Employee和Project初始化三个对象,departmentfactory是题目中第一题利用静态工厂实例化为Department实例化。xml文件中Department实例化并复制赋值,此处赋值用的是constructor-arg而不是property所以不需要设置name,constructor-arg赋值是会根据Department中的有参构造方法中参数的顺序一一赋值,因为List empList和Set proarrys的类型是一个类,所以这里赋值只需要用ref将上面的bean赋值过去就好了。test类执行只需要向xml文件获取Department类的对象然后执行toString()方法就好了。



