1、创建一个教师类,包含属性name和addr,通过xml文件配置方式,为属性赋值,并使用java反射机制,创建类的对象,并使用Method,调用类的setXXX方法,为属性赋值。
2、创建一个StudentService类,其中需要使用StudentDao接口的保存方法,来存储一个Student类的对象,StudentDao接口有两个不同的实现类,通过Spring的方式,为Student类创建对象并为属性赋值,并通过Spring的方式,创建StudentService类的对象以及StudentDao接口的一个实现类对象,将两个对象的依赖关系在spring容器中注入,并模拟完成保存的操作
package com.xzit.model; public class Teacher { private String name; private String addr; private Student student; public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String isGuide(){ System.out.println(name+"在指导"+student.getName()+"学习java"); String var1 = name+"在指导"+student.getName()+"学习java"; return var1; } @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + ", addr='" + addr + '\'' + '}'; } }
package com.xzit.util; import com.xzit.model.Teacher; public class test1 { public static void main(String[] args) { Teacher teacher = (Teacher) XmlBeanFactory.getBean("C:\\JavaProject\\idea_Workspace\\springFramework\\day_01_job\\src\\main\\resources\\bean.xml" ,"teacher"); System.out.println(teacher); } }
package com.xzit.model; public class Student { private String name; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", gender='" + gender + '\'' + '}'; } }
package com.xzit.util; public interface StudentDao { void save(String var1); }
package com.xzit.util; public class StudentService implements StudentDao{ @Override public void save(String var1) { System.out.println("数据库保存了:"+var1); } }
package com.xzit.util; import com.xzit.model.Student; import com.xzit.model.Teacher; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class test2 { public static void main(String[] args) { //加载spring容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); Student student = (Student) ctx.getBean("student"); Teacher teacher = (Teacher) ctx.getBean("teacher"); String guide = teacher.isGuide(); StudentDao studentDao = (StudentDao) ctx.getBean("studentDao"); studentDao.save(guide); /*student.setName("琪琪"); student.setGender("女"); System.out.println(student);*/ } }
package com.xzit.util; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.List; public class XmlBeanFactory { public static Object getBean(String fileName,String key){ SAXReader reader=new SAXReader(); try { Document doc = reader.read(fileName); Element root = doc.getRootElement();//获取根元素 List<Element> beans = root.elements("bean");//获取下面所有的bean元素 for (Element bean : beans){ if (key.contentEquals(bean.attributeValue("id"))){ String clazz=bean.attributeValue("class"); Class<?> aClass = Class.forName(clazz);//加载类,获得字节码 List<Element> properties = bean.elements("property");//取下面所有属性配置 Object obj = aClass.getConstructor().newInstance();//构造对象 for (Element property:properties){ //获取属性名并给属性赋值 String propertyName = property.attributeValue("name"); Field field = aClass.getDeclaredField(propertyName); field.setAccessible(true); field.set(obj,property.attributeValue("value")); } return obj; } } } catch (DocumentException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return null; } }