Spring浅析

Spring是Java开发中几乎是必备的工具,核心思想为IoC和DI。
IoC是控制反转,即是Inversion of control,即以前是对象控制依赖对象的生命周期,这样耦合度很高,通过Spring容器来控制对象的生存周期,这样就不需要依赖对象的对象控制被依赖对象的生存周期了。
DI是依赖注入,是依赖对象和被依赖对象解耦的方式,当然内部的实现是Spring容器来管理和提供对象。依赖注入的一个重要的基础是Java反射,反射允许在运行时动态的生成对象、执行对象的方法和修改对象的属性。
一:HashMap来保存bean,<id,>

// 利用Map来管理bean对象
    if (beanProperty.element("map") != null) {
        Map<String, Object> propertiesMap = new HashMap<String, Object>();
        Element propertiesListMap = (Element) beanProperty.elements().get(0);
        Iterator<?> propertiesIterator = propertiesListMap.elements().iterator();
        while (propertiesIterator.hasNext()) {
            Element vet = (Element) propertiesIterator.next();
            if (vet.getName().equals("entry")) {
                String key = vet.attributeValue("key");
                Iterator<?> valuesIterator = vet.elements().iterator();
                while (valuesIterator.hasNext()) {
                    Element value = (Element) valuesIterator.next();
                    if (value.getName().equals("value")) {
                        propertiesMap.put(key, value.getText());
                    }
                    if (value.getName().equals("ref")) {
                        propertiesMap.put(key, new String[] { value.attributeValue("bean") });
                    }
                }
            }
        }
        bean.getProperties().put(name, propertiesMap);
    } 
public static void setProperty(Object obj, String name, String value) {
		Class<? extends Object> clazz = obj.getClass();
		try {
			String methodName = returnSetMthodName(name);
			Method[] ms = clazz.getMethods();
			for (Method m : ms) {
				if (m.getName().equals(methodName)) {
					if (m.getParameterTypes().length == 1) {
						Class<?> clazzParameterType = m.getParameterTypes()[0];
						setFieldValue(clazzParameterType.getName(), value, m,
								obj);
						break;
					}
				}
			}
		} catch (SecurityException e) {
			throw new RuntimeException(e);
		} catch (IllegalArgumentException e) {
			throw new RuntimeException(e);
		} catch (IllegalAccessException e) {
			throw new RuntimeException(e);
		} catch (InvocationTargetException e) {
			throw new RuntimeException(e);
		}
}

猜你喜欢

转载自blog.csdn.net/JoshuaXin/article/details/83579045