一尘不染

在春季使用AOP进行日志记录?

spring-mvc

我是办公室新人。所以对我来说没有指导。

我需要与执行日志记录AOP使用log4j

我在没有AOP基本spring MVC示例的情况下实现了日志记录?

还在AOP使用aspectJ不记录的小样本(仅作了Sysout)吗?

我不知道如何整合它?

有人可以给我一个创业的想法吗?

好的答案绝对值得赞赏…


阅读 281

收藏
2020-06-01

共1个答案

一尘不染

Spring使我们使用AOP非常容易。这是一个简单的日志记录示例:

@Aspect
public class MyLogger {

    private Logger log = Logger.getLogger(getClass());

    @After("execution(* com.example.web.HomeController.*(..))")
    public void log(JoinPoint point) {
        log.info(point.getSignature().getName() + " called...");
    }
}

然后只需配置您的applicationContext.xml(或等效文件):

    <aop:aspectj-autoproxy>
        <aop:include name="myLogger"/>
    </aop:aspectj-autoproxy>

    <bean id="myLogger" class="com.example.aspect.MyLogger"/>

您会在MyLogger类中注意到我@After在方法上方指定的内容。这被称为建议,它基本上指定了将在有问题的方法 之后 调用此“
log”方法。其他选项包括@Before, @Around, @AfterThrowing

该表达式"execution(* com.example.web.HomeController.*(..))"称为切入点表达式,它指定我们要定位的对象(在这种情况下,是HomeController类的所有方法)。

PS
aop名称空间(xmlns:aop="http://www.springframework.org/schema/aop")和架构位置(取决于版本)将需要添加到顶部的applicationContext.xml中。这是我的设置:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
2020-06-01