aop是面向切面程式設計,適合把通用的物件行為整合在一起,寫成通知。 本文通過兩個例子介紹mvc和springboot兩種環境下使用aop
<?xml version="1.0" encoding="utf-8" ?>
""xmlns:xsi=""
xmlns:context=""
xmlns:aop=""
xsi:schemalocation="
/spring-beans-3.1.xsd
/spring-aop-3.1.xsd">
-autoproxy/>
-scan base-package="com.dj.aop.boot.demo"
/>
user類,在aop中user類叫目標,hello是我們要切的方法叫連線點。
@component
public class user
}
useraspect
execution(* com.dj.aop.boot.demo.boot.user.*(..))
是切點
around、before和after是通知
spring是在執行期把通知在符合切點的連線點,動態**目標。 這個過程叫織入
spring使用的是執行期織入,織入的方式是動態代練,由jdk動態**和cglib,兩者的區別的jdk動態**需要目標實現介面,cglib**需要目標類是可繼承的,連線點是可繼承的。
@aspect
@component
public class useraspect
@around(
"execution(* com.dj.aop.boot.demo.boot.user.*(..))"
) public object around(proceedingjoinpoint pjp) throws throwable
@after(
"execution(* com.dj.aop.boot.demo.boot.user.*(..))"
) public void after(
) @afterreturning(
"execution(* com.dj.aop.boot.demo.boot.user.*(..))"
) public void afterreturn(
)}
試一下**
public class mvcmain
}
執行結果
before around
before
hiafterreturn
after
after around
我們可以看到執行的順序是先進入around說明around優先順序最高,再進入before,然後執行方法,再然後afterreturn,再然後是after,然後回到around方法
執行順序 around->before ->連線點 ->afterreturn或者afterthrow->after
使用註解作為切點
@restcontroller
public class usercontroller
}
切面
@aspect
@component
public class logaspect
atomiclong.incrementandget();
}return proceed;
}}
boot啟動類
SpringBoot配置屬性之MVC
主要是mvc相關的一些配置 spring.resources.cache period設定資源的快取時效,以秒為單位.spring.resources.chain.cache是否開啟快取,預設為 true spring.resources.chain.enabled是否開啟資源 handling c...
SpringBoot配置屬性之MVC
主要是mvc相關的一些配置 spring.resources.cache period設定資源的快取時效,以秒為單位.spring.resources.chain.cache是否開啟快取,預設為 true spring.resources.chain.enabled是否開啟資源 handling c...
SpringBoot配置屬性之MVC
目錄 mvcmessages mobile view resource multipart freemarker velocity thymeleaf mustcache groovy模板 springboot配置屬性系列 序 主要是mvc相關的一些配置 spring.resources.cache...