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);
}
}