從零開始開發IoC依賴注入框架 -- containerx (深入研究Spring原始碼)(含github原始碼)
阿新 • • 發佈:2019-01-07
摘要: 自己寫了一個開源的IoC控制反轉(依賴注入)框架,名為containerx。初學Spring原始碼的同學,可以先研究下這個小專案。更容易理解Spring的原始碼
自己寫了一個開源的IoC控制反轉(依賴注入)框架,名為containerx。初學Spring原始碼的同學,可以先研究下這個小專案。更容易理解Spring的原始碼。 很多同學想學習Spring的原始碼,但是Spring的原始碼太龐大了。 看相應的書籍,並結合原始碼來研究。還是很難搞清楚原理(巢狀呼叫太多,而且架構相當複雜)。 我通過學習郝佳編著的書籍《Spring原始碼深度解析》,根據Spring的基本原理。寫出了一個雛形的依賴注入框架,取名為containerx。 專案的原始碼地址為
https://github.com/flylib/containerx
開發者 Frank Liu(劉少明) 個人git https://github.com/flylib
郵箱[email protected]
程式碼片段如下
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/flylib/containerx
如果覺得有用,歡迎star。