@interface 自定义annotation 通过AOP来实现人员操作日志

@interface 自定义annotation 通过AOP来实现人员操作日志

首先 自定义annotation

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Token {


   //此处实例是用来做token验证的,要是日志处理的话  可以在多定义几个参数 
    boolean save() default false;  //定义了save参数
 
    boolean remove() default false;  //定义了remove参数


}



2、 在需要记录日志的方法上引入注解

@RequestMapping(value = { "/xxxxxxxx" }, produces = { "application/json;charset=UTF-8" })
@ResponseBody
@Token(remove=true)    
public String xxxxxxxxx(HttpServletRequest request,HttpServletResponse response, HttpSession session) throws IllegalAccessException, InvocationTargetException, IntrospectionException{


3、 在spring.xml配置文件中加上aop注解

 <context:component-scan base-package="com.xxxxx.web.common.aspect" />
aop注解
      <aop:aspectj-autoproxy proxy-target-class="true" /> 


4、在  com.xxxxx.web.common.aspect 包下 新建切面bean   TokenAspect


@Component
@Aspect
public class TokenAspect {

//配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点

@Pointcut("execution(* com.fyyg.web..*(..))")
public void aspect(){}


* 配置前置通知,使用在方法aspect()上注册的切入点
* 同时接受JoinPoint切入点对象,可以没有该参数
 
@Before("aspect()")
public void before(JoinPoint joinPoint) throws ClassNotFoundException {
if(log.isInfoEnabled()){
log.info("before " + joinPoint);
}
String targetName = joinPoint.getTarget().getClass().getName();  
       String methodName = joinPoint.getSignature().getName();  
       Object[] arguments = joinPoint.getArgs();  
       Class targetClass = Class.forName(targetName);  
       Method[] methods = targetClass.getMethods();  
       Token annotation=null;
        for (Method method : methods) {  
            if (method.getName().equals(methodName)) {  
               Class[] clazzs = method.getParameterTypes();  
                if (clazzs.length == arguments.length) {  

    //获取到自定义注解,且在这个可以获取到  当前类注解的参数值 。如上,则可获取到remove值为true
               annotation = method.getAnnotation(Token.class);
                 //在此处可以进行逻辑操作
                  
               }  
           }  
       }  
        //return description;  
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,我们可以使用自定义注解来实现AOP(面向切面编程)。AOP是一种编程范型,它允许开发者在程序运行时动态地将代码切入到已有代码的特定位置。 下面是一个简单的示例,演示如何使用自定义注解实现AOP。 首先,我们需要定义一个自定义注解: ``` @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Loggable { } ``` 这个注解用来标记需要记录日志的方法。它的@Target注解指定了它只能用于方法上,@Retention注解指定了它的生命周期是运行时。 接下来,我们创建一个切面类,用来实现AOP的逻辑: ``` @Aspect @Component public class LoggingAspect { @Before("@annotation(com.example.Loggable)") public void logMethodCall(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); System.out.println("Method " + methodName + " called"); } } ``` 这个类使用Spring AOP框架提供的@Aspect注解来标记它是一个切面类。它的@Before注解指定了它要在被@Loggable注解标记的方法之前执行。JoinPoint参数包含了被拦截的方法的信息,我们可以从中获取方法名等信息。 最后,在需要记录日志的方法上加上@Loggable注解即可: ``` @Component public class MyService { @Loggable public void doSomething() { // do something } } ``` 当doSomething()方法被调用时,LoggingAspect中的logMethodCall()方法会被执行,记录方法调用信息。 这就是使用自定义注解实现AOP的基本步骤。当然,实际应用中会更加复杂,需要更多的切面逻辑和注解参数等。但是这个简单的示例可以帮助你理解如何使用自定义注解实现AOP
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值