码迷,mamicode.com
首页 > 编程语言 > 详细

Spring AOP 实现业务日志记录

时间:2015-07-09 16:23:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

1. 用户管理业务逻辑接口(UserManagerApplogic.java )

Java代码  技术分享

  1. package com.iteye.applogic;  

  2.   

  3. public interface UserManagerApplogic {  

  4.     public void addUser(String name);  

  5. }  

 

2. 用户管理业务逻辑实现类(UserManagerApplogicImpl.java)

Java代码  技术分享

  1. package com.iteye.applogic.impl;  

  2.   

  3. import org.springframework.stereotype.Component;  

  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>  

 


Spring AOP 实现业务日志记录

标签:

原文地址:http://my.oschina.net/u/175660/blog/476656

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!