控制反轉和依賴注入(IOC)spring
Spring的IOC就是當調用者要使用被調用者時,spring容器會建立被調用者實例,無需調用者自行建立,而後進行依賴注入(@Autowired)編程
面向切面編程(AOP)spa
面向切面老是和麪向對象編程(OOP)作比較的。面向切面(AOP)攔截是到方法級別的,面向對象編程攔截是到對象級別的。當咱們須要給分散的對象引入公共行爲時候,通常採用切面思想,例如日誌、例如統一異常返回。能夠用@Aspect註解定義爲類切面。@Pointcut註解定義切面須要切入的切點。寫起來格式就是("execution(com.hikvision.product.controller)」)代理
動態代理和靜態代理日誌
靜態代理:對象
一個實現類要被調用時,能夠先經過代理類管理委託類,客戶端直接調用代理類就好了。接口
優勢:get
缺點:it
動態代理:io
動態代理是經過反射機制實現,最核心的接口是InvocationHandler和Proxy類
invocationHasndler接口的核心入參主要是Object proxy(被代理對象)、Method(被調用方法)、Object[] arg(調用方法入參)
Proxy類的核心入參主要是ClassLoader(類加載器)、interface(獲得所有接口)、invocationHandler接口的子類實例
JDK動態代理只能必須代理接口(不支持抽象類),代理類都須要實現InvocationHandler接口,而且實現invoke方法
客戶端調用時直接經過代理類logHandler.newProxyInstance(new targetObject)
JDK動態代理的代理對象在建立時,須要使用業務實現類所實現的接口做爲參數(由於在後面代理方法時須要根據接口內的方法名進行調用)。若是業務實現類是沒有實現接口而是直接定義業務方法的話,就沒法使用JDK動態代理了。而且,若是業務實現類中新增了接口中沒有的方法,這些方法是沒法被代理的(由於沒法被調用)