Spring AOP 實現業務日誌記錄

1. 用戶管理業務邏輯接口(UserManagerApplogic.java )java

Java代碼  收藏代碼spring

  1. package com.iteye.applogic;  app

  2.   

  3. public interface UserManagerApplogic {  函數

  4.     public void addUser(String name);  spa

  5. }  .net

 

2. 用戶管理業務邏輯實現類(UserManagerApplogicImpl.java)component

Java代碼  收藏代碼orm

  1. package com.iteye.applogic.impl;  xml

  2.   

  3. import org.springframework.stereotype.Component;  blog

  4.   

  5. import com.iteye.applogic.UserManagerApplogic;  

  6. import com.iteye.annotation.BussAnnotation;  

  7. @Component("userManager")   

  8. public class UserManagerApplogicImpl implements UserManagerApplogic {  

  9.   

  10.     @BussAnnotation(moduleName="人員管理",option="添加用戶")  

  11.     public void addUser(String name) {  

  12.         System.out.println("add a User!Name is "+name);  

  13.     }  

  14. }  

 

3.業務註釋類(BusAnnotation.java)

Java代碼  收藏代碼

  1. package com.iteye.annotation;  

  2.    

  3. import java.lang.annotation.ElementType;  

  4. import java.lang.annotation.Retention;  

  5. import java.lang.annotation.RetentionPolicy;  

  6. import java.lang.annotation.Target;  

  7.   

  8. @Retention(RetentionPolicy.RUNTIME)  

  9. @Target ({ElementType.METHOD})  

  10. public @interface  BussAnnotation {  

  11.     //模塊名  

  12.     String moduleName();  

  13.     //操做內容  

  14.     String option();  

  15. }  

 

(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代碼  收藏代碼

  1. package com.iteye.aop;  

  2.   

  3. import org.aspectj.lang.ProceedingJoinPoint;  

  4. import org.aspectj.lang.annotation.Around;  

  5. import org.aspectj.lang.annotation.Aspect;  

  6. import org.aspectj.lang.annotation.Pointcut;  

  7. import org.springframework.stereotype.Component;  

  8.   

  9. import com.iteye.annotation.BussAnnotation;  

  10.   

  11. @Aspect  

  12. @Component  

  13. public class LogInterceptor {  

  14.   

  15.     @Pointcut("execution(public * com.iteye..*.addUser(..))")  

  16.     public void aApplogic() {}  

  17.   

  18.     @Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")  

  19.     public Object interceptorApplogic(ProceedingJoinPoint pj,  

  20.             BussAnnotation annotation, Object object) throws Throwable {  

  21.         System.out.println("moduleName:"+annotation.moduleName());  

  22.         System.out.println("option:"+annotation.option());  

  23.         pj.proceed();  

  24.         return object;  

  25.     }  

  26. }  

 

5.配置文件(applicationContext-aop.xml)

Xml代碼  收藏代碼

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <beans xmlns="http://www.springframework.org/schema/beans"  

  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  4.        xmlns:context="http://www.springframework.org/schema/context"  

  5.        xmlns:aop="http://www.springframework.org/schema/aop"  

  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans  

  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

  8.            http://www.springframework.org/schema/context  

  9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  

  10.            http://www.springframework.org/schema/aop  

  11.            http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  

  12.     <context:annotation-config />  

  13.     <context:component-scan base-package="com.iteye"/>  

  14.     <aop:aspectj-autoproxy />  

  15. </beans>  

相關文章
相關標籤/搜索