本身寫了一個開源的IoC控制反轉(依賴注入)框架,名爲containerx。初學Spring源碼的同窗,能夠先研究下這個小項目。更容易理解Spring的源碼。 不少同窗想學習Spring的源碼,可是Spring的源碼太龐大了。 看相應的書籍,並結合源碼來研究。仍是很難搞清楚原理(嵌套調用太多,並且架構至關複雜)。 我經過學習郝佳編著的書籍《Spring源碼深度解析》,根據Spring的基本原理。寫出了一個雛形的依賴注入框架,取名爲containerx。 項目的源碼地址爲https://github.com/frank-liu-1/containerxgit
<b>開發者</b> Frank Liu(劉少明) 我的git https://github.com/frank-liu-1
<br/> 郵箱liushaomingdev@163.com <br/>github
代碼片斷以下架構
public static void inject(Object bean, Map<String, String> properties) { Map<String, String> methodMap = new HashMap<String, String>(); for (Map.Entry<String, String> entry : properties.entrySet()) { String configName = entry.getKey(); String configValue = entry.getValue(); String configMethodName = ""; if (configName != null && configName.length() > 0) { configMethodName = "set" + String.valueOf(configName.charAt(0)).toUpperCase() + configName.substring(1); } methodMap.put(configMethodName, configValue); } Class clazz = bean.getClass(); for (Method method : clazz.getMethods()) { String methodName = method.getName(); if (methodName.startsWith("set") && method.getParameterTypes().length == 1 && Modifier.isPublic(method.getModifiers()) && methodMap.containsKey(methodName)) { try { method.invoke(bean, methodMap.get(methodName)); } catch (Exception e) { e.printStackTrace(); } } } }
項目的源碼地址爲https://github.com/frank-liu-1/containerx 若是以爲有用,歡迎star。框架