Springmvc 简单的aop日志打印

打印的日志,一律用System.out.println来模拟。

步骤:

1.自定义注解,(不是必须的,但是,自定义注解能为打印日志提供更多详细信息)

2.配置日志切面

3.配置aop的xml

4.在相关Controller上附上自定义注解。

pom,只贴出了部分

<!--aop-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.6.11</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.11</version>
    </dependency>
<!--aop-->

1.自定义注解。

以前,都只知道用注解,从来都没自己定义过,也没想过它是怎么起作用的,今天自己弄了一遍,感觉注解原来是这么回事,真的挺强大的!

注解是如何起作用的:扫描,springmvc中有个<context:component-scan .../>的标签,用来扫描注解,
我的理解是这样的,比如,它在这个类上扫描到了一个Controller,它就为这个类执行Controller相关的代码,从而在我们看来加上一个@Controller,就有了Controller相关的功能,----我的个人理解。

注解里的属性也挺强大的,我们给属性赋值,从而执行相应的功能或标记信息。
@Target 注解作用的目标,用在什么上 TYPE.接口类,枚举,注解 METHOD 方法 等等。。。
@Retention RUNTIME 在运行时可以通过反射获取到,,
这里,我随便简单写了一个,


@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface OpenLog {
        String openType() default "";==>自定义属性有什么用,在这,比如:我把这个注解用在相应的@Controller上,然后这样写:@OpenLog(openType="登录").在打印日志的时候,获取这个Controller上的这个注解属性的值,从而,我就知道是在执行登录操作,等等。。。
}

2.定义日志切面

package aop;

import jtool.OpenLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
 * @author :JXH
 * @time :2019-02-20-下午7:37
 * 记录日志切面
 */
@Aspect
@Component
public class LogInterceptor {
    //1.拦截那些方法,用环绕通知的话,可以获取方法的返回值,更为强大!
    @Pointcut("execution(* controller..*.*(..))")
    public  void  pointCut(){}

    @Before("pointCut()")
    public void before(JoinPoint joinPoint){

//       获取方法上的注解
//       Signature signature= joinPoint.getSignature();
//        MethodSignature methodSignature=(MethodSignature) signature;
//       OpenLog openLog=  methodSignature.getMethod().getAnnotation(OpenLog.class);

//        获取类上的注解
        OpenLog openLog=joinPoint.getTarget().getClass().getAnnotation(OpenLog.class);


        System.out.println("执行方法:"+joinPoint.getSignature().getName()+
                           " 所属类:"+joinPoint.getSignature().getDeclaringTypeName());
        System.out.println("开始时间:"+System.currentTimeMillis());
        System.out.println("OpenLog参数:"+openLog.openType());
        Object[] params=joinPoint.getArgs();//获取参数!
        for (Object o:params){
            System.out.println("请求参数:"+o);
        }
      
    }
    @After("pointCut()")
    public  void after(JoinPoint joinPoint){
        System.out.println("结束时间:"+System.currentTimeMillis());
    }
    //其他想要可自己实现。
}

3.配置文件 springmvc-servlet.xml.

<!--aop-->
     <!--扫描注解和切面-->             
     <context:component-scan base-package="aop,jtool"/>
     我不知道下面这个有什么用
     <aop:aspectj-autoproxy proxy-target-class="true"/>
<!--aop-->

4.在Controller上添加自定义的注解

                     在这我的意思,表示进了这个Controller
@OpenLog(openType = "formController")
@Controller
public class formcontroller {
 。。。。。
}


@OpenLog(openType = "viewController")
@Controller
public class viewResolverController  {
......
}

......

打印日志:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值