模擬實現Spring IOC

2021-06-22 20:05:51 字數 2503 閱讀 1198

通過在類上標註@registration 註冊進容器,@injection從容器注入物件

容器類:

public class springcontainer else

bean.setbeanclass(c);

mappropsmap = new hashmap();

//處理注入屬性

field props = c.getdeclaredfields();

for(field p : props)

bean.setproperties(propsmap);

beanmap.put(bean.getid(), bean);}}

private static mapbeanmap = new hashmap();

public static object getbean(string beanname) throws classnotfoundexception,

instantiationexception, illegalacces***ception, illegalargumentexception, invocationtargetexception

object o = bean.getbeanclass().newinstance();

iterator> iter = bean.getproperties().entryset().iterator();

while (iter.hasnext())

return o;

}private static void setproperty(object obj, string propname, class propclass) throws illegalargumentexception, illegalacces***ception, invocationtargetexception, classnotfoundexception, instantiationexception }}

}}public static string returnsetmthodname(string fieldname)

/**

* 從包package中獲取所有的class

*  * @param pack

* @return

*/  

public static set> getclasses(string pack) else if ("jar".equals(protocol))  

// 如果前半部分和定義的包名相同  

if (name.startswith(packagedirname))  

// 如果可以迭代下去 並且是乙個包  

if ((idx != -1) || recursive) catch (classnotfoundexception e)  

}  }  

}  }  

} catch (ioexception e)  

}  }  

} catch (ioexception e)  

return classes;  

}  /**

* 以檔案的形式來獲取包下的所有class

*  * @param packagename

* @param packagepath

* @param recursive

* @param classes

*/  

public static void findandaddclassesinpackagebyfile(string packagename,  

string packagepath, final boolean recursive, set> classes)  

// 如果存在 就獲取包下的所有檔案 包括目錄  

file dirfiles = dir.listfiles(new filefilter()  

});  

// 迴圈所有檔案  

for (file file : dirfiles) else catch (classnotfoundexception e)  

}  }  

}  }

bean描述類

public class bean

public string getid()

public mapgetproperties()

public void setbeanclass(class beanclass)

public void setid(string id)    

public void setproperties(mapproperties)

}annotation類兩個

@retention(retentionpolicy.runtime)

public @inte***ce injection

@retention(retentionpolicy.runtime)

public @inte***ce registration

模擬實現strcmp

函式簡介 原型 int strcmp const char s1,const char s2 所在標頭檔案 string.h 功能 比較字串s1和s2。一般形式 strcmp 字串1,字串2 說明 當s1注意不是 1 當s1 s2時,返回值 0 當s1 s2時,返回正數 注意不是1 如下 int m...

模擬實現strncat

模擬實現strncat 在系統庫函式中,存在strncat這個函式,它用於字串的追加,就是在乙個字串後面再追加乙個字串,它的函式原型為 char strncat char strdest,const char strsource,size t count 在其中,strdest為目標字串,strso...

模擬實現printf

模擬實現printf。例如實現 print d tcc s n 3,w e welcome to you 使用可變引數應該有以下步驟 1 首先在函式裡定義乙個va list型的變數,這裡是arg ptr,這個變數是指向引數的指標.2 然後用va start巨集初始化變數arg ptr,這個巨集的第二...