Spring AOP 實現業務日誌記錄
1. 使用者管理業務邏輯介面(UserManagerApplogic.Java )
- package com.iteye.applogic;
- public interface UserManagerApplogic {
- public void addUser(String name);
- }
2. 使用者管理業務邏輯實現類(UserManagerApplogicImpl.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)
- 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)
- 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;
- import org.springframework.stereotype.Component;
- import com.iteye.annotation.BussAnnotation;
- @Aspect
- @Component
- public class LogInterceptor {
- @Pointcut("execution(public * com.iteye..*.addUser(..))")
- public void aApplogic() {}
- @Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")
- public Object interceptorApplogic(ProceedingJoinPoint pj,
- BussAnnotation annotation, Object object) throws Throwable {
- System.out.println("moduleName:"+annotation.moduleName());
- System.out.println("option:"+annotation.option());
- pj.proceed();
- return object;
- }
- }
5.配置檔案(applicationContext-aop.xml)
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
- <context:annotation-config />
- <context:component-scan base-package="com.iteye"/>
- <aop:aspectj-autoproxy />
- </beans>
6.測試類( test.java (Junit) )
- import org.junit.Test;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.iteye.applogic.UserManagerApplogic;
- public class test {
- @Test
- public void test1()
- {
- ClassPathXmlApplicationContext ctx =
- new ClassPathXmlApplicationContext("applicationContext-aop.xml");
- UserManagerApplogic userManager = (UserManagerApplogic) ctx.getBean("userManager");
- userManager.addUser("-li.bb-");
- ctx.destroy();
- }
- }
相關文章
- 運用Spring Aop,一個註解實現日誌記錄Spring
- Spring boot學習(六)Spring boot實現AOP記錄操作日誌Spring Boot
- 基於AOP和ThreadLocal實現日誌記錄thread
- Spring Boot利用AOP獲取使用者操作實現日誌記錄Spring Boot
- Spring Boot AOP 掃盲,實現介面訪問的統一日誌記錄Spring Boot
- spring-boot-route(十七)使用aop記錄操作日誌Springboot
- Spring AOP實現統一日誌輸出Spring
- Rust 實現日誌記錄功能Rust
- Spring AOP 的實現方式(以日誌管理為例)Spring
- Spring AOP實現後臺管理系統日誌管理Spring
- Swoft AOP 記錄使用者操作日誌
- 我使用Spring AOP實現了使用者操作日誌功能Spring
- 日誌模組(一標頭檔案就實現了日誌記錄)
- 欄位修改記錄操作日誌的實現
- 記錄 | 實習日誌 9
- php日誌,記錄日誌PHP
- thinkphp 利用中介軟體 實現日誌操作記錄PHP
- Spring基於註解的環繞通知實現請求方法日誌記錄Spring
- Spring——AOP實現Spring
- 介面自動化之實現日誌記錄封裝封裝
- 日誌記錄器
- Spring之AOP實現Spring
- 【Spring】AOP實現原理Spring
- Spring AOP實現原理Spring
- 在Golang中使用Zap實現結構化日誌記錄Golang
- AOP行為日誌
- Laravel sql 日誌記錄LaravelSQL
- secureCRT記錄操作日誌Securecrt
- 記錄日誌檔案
- PHP日誌記錄方法PHP
- oracle日誌操作記錄Oracle
- Spring AOP 日誌攔截器的事務管理Spring
- Spring 使用Aop 做切面日誌,和許可權。Spring
- Springboot AOP 自定義註解實現系統日誌Spring Boot
- SpringSecurity許可權管理系統實戰—八、AOP 記錄使用者、異常日誌SpringGse
- Spring AOP的實現原理Spring
- Spring AOP實現過程Spring
- 日誌記錄 PHP下往linux目錄下寫日誌PHPLinux