理解Spring框架---利用,xml,java反射简单实现Spring

来源:互联网 发布:下颌关节紊乱 知乎 编辑:程序博客网 时间:2024/06/06 03:51

对于Spring框架的简单模拟:

     a).读取xml配置文件

     b.)利用java反射机制获取对象


第一步:创建一个接口,定义一个获取对象的方法getBean():

public interface BeanFactory {public  Object  getBean(String name);}


第二步:创建一个类XmlContext,实现Beanfactory接口中的getBean方法:

public class XmlContext implements BeanFactory {// 对象名加对象实例private Map<String, Object> beans = new HashMap<String, Object>();// 利用jdom读取xml文件获取对象名,通过反射获取对象public XmlContext() throws Exception {SAXBuilder builder = new SAXBuilder();InputStream file = new FileInputStream("test.xml");Document document = builder.build(file);// 获得文档对象Element root = document.getRootElement();// 获得根节点List<Element> list = root.getChildren();for (Element elements : list) {// 获取属性值,即为对象的名字String ObjectName = elements.getAttributeValue("id");// 在获取类的路径,在通过java反射获取类的类类型,在获取该类的对象String classpath = elements.getAttributeValue("class");Object obj = Class.forName(classpath).newInstance();beans.put(ObjectName, obj);// 获取子节点下的property节点List<Element> eles = elements.getChildren("property");// 进行遍历for (Element e : eles) {String proName = e.getAttributeValue("name");Object beanObj = this.getBean(e.getAttributeValue("bean"));System.out.println(beanObj.toString());// 然后调用service的构造方法String methodName = "set"+ proName.substring(0, 1).toUpperCase()+ proName.substring(1);System.out.println("methodName:" + methodName);// 通过反射获取构造方法Method method = obj.getClass().getMethod(methodName,beanObj.getClass().getInterfaces()[0]);method.invoke(obj, beanObj);}}}@Overridepublic Object getBean(String name) {return beans.get(name);}}





0 0
原创粉丝点击