自定义注解 aspectj方式

本文介绍如何在Spring框架中使用AspectJ自定义注解进行AOP编程,通过示例展示如何创建自定义注解并应用于日志记录,详细解析了注解的声明、配置及切面的实现。

自定义注解 aspectj方式
spring-servlet.xml

	<!-- aop 注解实现 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

@IpLoginAnnotation

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface IpLoginAnnotation {
    boolean IpLogin() default true;
}

LogAspect.class

package com.ccd.util.annotation.iplog;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect //该注解标示该类为切面类 
@Component //注入依赖
public class LogAspect {

    //标注该方法体为后置通知,当目标方法执行成功后执行该方法体  
    @Before(value = " @annotation(rl)")  
    public void addLogSuccess(JoinPoint jp, IpLoginAnnotation rl){ 
    	HttpServletRequest request = null;
    	System.out.println("进入");
        Object[] parames = jp.getArgs();//获取目标方法体参数  
        for (int i = 0; i < parames.length; i++) {  
            System.out.println(parames[i]); 
            Object object = parames[i];
            if(object instanceof HttpServletRequest){
            	request=(HttpServletRequest)object;
            	String ip = request.getRemoteAddr();// 返回发出请求的IP地址
            	System.out.println("ip地址 :"+ip);
            }
        }  
        Signature pojo = jp.getSignature();
        System.out.println(pojo);//String com.ccd.user.action.UserAction.insert(User,String)
        System.out.println(pojo.getName());  //insert
        String className = jp.getTarget().getClass().toString();//获取目标类名  
        System.out.println("className:" + className);
        className = className.substring(className.indexOf("com")); //className:class com.ccd.user.action.UserAction 
        String signature = pojo.toString();//获取目标方法签名  
        System.out.println("signature:" + signature);//signature:String com.ccd.user.action.UserAction.insert(HttpServletRequest,HttpServletResponse,User,String)
    } 
}

应用


	@IpLoginAnnotation
	@RequestMapping("/insert")
	// 新增-保存数据方法
	public String insert(HttpServletRequest request, HttpServletResponse response,User user,String name) {
		System.out.println("获得name :"+name);
		service.insert(user);
		return "redirect:list";
		// 重定向到本类的@RequestMapping("list")
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值