本篇文章給大家分享的是有關(guān)結(jié)合反射說明SpringIOC的實(shí)現(xiàn)原理是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、大埔ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的大埔網(wǎng)站制作公司
前面已經(jīng)對(duì)IOC進(jìn)行了說明,也知道了IOC的原理是反射機(jī)制。那么接下來看看如何通過反射機(jī)制說明IOC
看下代碼:
packagecom.sinoair.gtms.controller.web.IOC;
importjavax.annotation.Resource;
importjavax.xml.ws.Service;
importjava.lang.reflect.Field;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
public classMyIOC {
/**
* 模擬Spring掃描的注解包
*/
private final staticString packageName = "com.albert.AnnotationTest";
/**
* 存放注解的bean對(duì)象
*/
private staticMap<String,Object> beanMap =newHashMap<String, Object>();
static{
try{
packageToScan();
} catch(InstantiationExceptione) {
e.printStackTrace();
} catch(IllegalAccessExceptione) {
e.printStackTrace();
}
}
/**
* 根據(jù)beanName從容器獲取bean對(duì)象
* @parambeanName
* @return
*/
public staticObject getBean(String beanName){
Object obj = null;
obj = beanMap.get(beanName);
returnobj;
}
/**
* 遍歷包中的注解類
* @throwsIllegalAccessException
* @throwsInstantiationException
*/
private static voidpackageToScan() throwsInstantiationException,IllegalAccessException{
List<Class> clsList =ClassByPackage.getClasssFromPackage(packageName);
//先加載dao
for(Class cls : clsList){
//判斷類是不是有@Respository注解
if(cls.isAnnotationPresent(Respository.class)){
String clsName =AlbertUtil.getBeanName(cls.getName());
//bean對(duì)象存入map
beanMap.put(clsName,cls.newInstance());
}
}
//加載service,同時(shí)對(duì)其中@Resource注解的屬性進(jìn)行賦值
for(Class cls : clsList){
if(cls.isAnnotationPresent(Service.class)){
String clsName =cls.getName();
clsName =clsName.substring(clsName.lastIndexOf(".")+1, clsName.length());
beanMap.put(AlbertUtil.toLowerCaseFirstOne(clsName),cls.newInstance());
//掃描注解@Resource的屬性并賦值
Field[] field = cls.getDeclaredFields();
for(Field f : field){
//判斷屬性是不是有@Resource注解
if(f.isAnnotationPresent(Resource.class)){
f.setAccessible(true);
f.set(beanMap.get(AlbertUtil.getBeanName(cls.getName())), beanMap.get(f.getName()));
}
}
}
}
}
}
以上就是結(jié)合反射說明SpringIOC的實(shí)現(xiàn)原理是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:結(jié)合反射說明SpringIOC的實(shí)現(xiàn)原理是怎樣的
URL網(wǎng)址:http://aaarwkj.com/article18/igdhdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、App設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)、網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)