為beanfactory 物件執行後續處理 -
在上下文context中註冊bean
為bean註冊攔截處理器(aop相關)
初始化上下文訊息
初始化事件多播
初始化主題資源
註冊自定義***
例項化所有非lazy-init 的singleton 例項
發布相應事件
public
void
refresh()
throws bean***ception, illegalstateexception
catch
(bean***ception var9)
this
.destroybeans()
;this
.cancelrefresh
(var9)
;throw var9;
}finally
}}
面向切面程式設計,底層原理是動態**實現.
如果切面策略目標有介面實現,使用jdk動態**技術;無介面則使用cglib技術生成動態**.
public object invoke
(object proxy, method method, object[
] args)
throws throwable
if(method.
getdeclaringclass()
== decoratingproxy.
class
)// 定義返回結果資料的引用
object retval;if(
!this
.advised.opaque && method.
getdeclaringclass()
.isinte***ce()
&& method.
getdeclaringclass()
.isassignablefrom
(advised.
class))
if(this
.advised.exposeproxy)
// 獲取目標物件的類物件
target = targetsource.
gettarget()
; class<
?> targetclass = target != null ? target.
getclass()
: null;
// 獲取**需要在目標方法執行前後,切入的***鏈.
list
chain =
this
.advised.
getinterceptorsanddynamicinterceptionadvice
(method, targetclass);if
(chain.
isempty()
)else
// 獲取目標物件中方法的返回結果型別.
class<
?> returntype = method.
getreturntype()
;if(retval != null && retval == target && returntype != object.
class
&& returntype.
isinstance
(proxy)
&&!rawtargetaccess.
class
.isassignablefrom
(method.
getdeclaringclass()
))else
if(retval == null && returntype != void.type && returntype.
isprimitive()
) object var13 = retval;
return var13;
} var9 =
this
.equals
(args[0]
);}finally
if(setproxycontext)
}return var9;
}
list chain = this.advised.getinterceptorsanddynamicinterceptionadvice(method, targetclass);
advisedsupport.getinterceptorsanddynamicinterceptionadvice()
如果***鏈為空即**物件沒有需要切入的***,則執行目標物件中的方法.
public list
getinterceptorsanddynamicinterceptionadvice
(method method,
@nullable class<
?> targetclass)
return cached;
}
methodinvocation invocation = new reflectivemethodinvocation(proxy, target, method, args, targetclass, chain);
retval = invocation.proceed();
按照順序執行攔截**和目標物件中的方法.
public object proceed()
throws throwable
else
else
}}
Spring IOC和DI以及AOP理解
這三個概念可能大家都不陌生,在面試中經常會出現關於此類的問題,關於對他們的個人理解如下。ioc其實就是控制反轉,控制指的是物件的建立 管理 例項化權利,反轉指的是控制權交給了外部容器spring框架,打個比喻,我在專案中創造了乙個物件類,在業務層需要用到他了,一般的辦法是什麼?是不是new物件啊,畢...
對於Spring IOC 和 AOP 簡單理解
ioc inversion of controll,控制反轉 是一種設計思想,將原本在程式中手動建立物件的控制權,交由給spring框架來管理。ioc容器是spring用來實現ioc的載體,ioc容器實際上就是乙個map key,value map中存放的是各種物件。這樣可以很大程度上簡化應用的開發...
Spring IOC部分總結
di dependency injection 依賴注入 在spring框架負責建立bean物件時,動態的將依賴物件注入到baen元件 testold 例子 建立userservice,實現userserviceimpl 建立單元測試 test 相當於new 物件 並且賦值 bean的作用域 單例和...