1. 使用者管理商務邏輯介面(UserManagerApplogic.java ) Java代碼 package com.iteye.applogic; public interface UserManagerApplogic { public void addUser(String name); }
2. 使用者管理商務邏輯實作類別(UserManagerApplogicImpl.java) Java代碼 package com.iteye.applogic.impl; import org.springframework.stereotype.Component; import com.iteye.applogic.UserManagerApplogic; import com.iteye.annotation.BussAnnotation; @Component("userManager") public class UserManagerApplogicImpl implements UserManagerApplogic { @BussAnnotation(moduleName="人員管理",option="添加使用者") public void addUser(String name) { System.out.println("add a User!Name is "+name); } }
3.商務記事類(BusAnnotation.java) Java代碼 package com.iteye.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface BussAnnotation { //模組名 String moduleName(); //操作內容 String option(); }
(1)RetentionPolicy(保留原則)是一個enum類型,共有三個值,分別是SOURCE,CLASS 和 RUNTIME。
SOURCE 代表的是這個Annotation類型的資訊只會保留在程式源碼裡,源碼如果經過了編譯之後,Annotation的資料就會消失,並不會保留在編譯好的.class檔案裡面。
ClASS的 代表的是這個Annotation類型的資訊保留在程式源碼裡,同時也會保留在編譯好的.class檔案裡面,在執行的時候,並不會把這一些資訊載入到虛擬機器(JVM)中去.注意一下,當你沒有設定一個Annotation類型的Retention值時,系統預設值是CLASS。
RUNTIME代表的是表示在源碼、編譯好的.class檔案中保留資訊,在執行的時候會把這一些資訊載入到JVM中去的。
(2)ElementType
@Target裡面的ElementType是用來指定Annotation類型可以用在哪一些元素上的.
TYPE(類型)是指可以用在Class,Interface,Enum和Annotation類型上.
FIELD(屬性)
METHOD(方法)
PARAMETER(參數)
CONSTRUCTOR(建構函式)
LOCAL_VARIABLE(局部變數)
ANNOTATION_TYPE
PACKAGE(包)
(3)@Documented
@Documented的目的就是讓這一個Annotation類型的資訊能夠顯示在javaAPI說明文檔上;沒有添加的話,使用javadoc產生API文檔的時候就會找不到這一個類型產生的資訊。
(4)@Inherited
如果需要把Annotation的資料繼承給子類,那麼就會用到@Inherited這一個Annotation類型。
4.切面類(LogInterceptor.java) Java代碼 package com.iteye.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut;