• Spring Ioc小练习


    1、创建一个教师类,包含属性nameaddr,通过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;
        }
    }
  • 相关阅读:
    Java这样学,Offer随便拿,学习方法和面试经验分享
    LeetCode All in One 题目讲解汇总(持续更新中...)
    nodejs连接sqlserver
    配置-XX:+HeapDumpOnOutOfMemoryError 对于OOM错误自动输出dump文件
    list.ensureCapacity竟然会变慢
    java List.add操作可以指定位置
    java MAT 分析
    java STW stop the world 哈哈就是卡住了
    python中的is判断引用的对象是否一致,==判断值是否相等
    卡尔曼滤波(Kalman Filter)
  • 原文地址:https://www.cnblogs.com/zengyu1234/p/16369211.html
Copyright © 2020-2023  润新知