我在服务调用时记录所有方法时遇到了一些问题。代码是这样的:
package com.myproject.controller;
@RestController(/person)
public class Controller{
public Person getpersonInfo(){
......
getValidPerson();
}
}
public Person getValidPerson() {
isPersonValid(Person person);
....
}
人类方法:
package com.myproject.dao;
public class Dao{
public boolean isPersonValid(){
//Checks for the person is Valid
}
}
Aspect类:
package com.myproject;
@Component
@Aspect
public class Logging{
@Before("execution(* com.myproject..*.*(..)))")
public void beforeServiceCall(Jointpoint jp) {
//Some Logging function
}
}
像这样的主要课程
package com.myproject;
@SpringBootApplication
@EnableAutoConfiguration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
@EnableAspectJAutoProxy()
public class Main implements LoadTimeWeavingConfigurer{
public static void main(String[] args){
......
}
}
Pom文件:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-instrument -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.1</version>
</dependency>
当我致电服务http://localhost:8080/person - GET时 getpersonInfo()只是在这种情况下登录,我也试过了 LTW,但不解决
我需要将所有内部方法记录到服务中,例如getValidPerson(),isPersonValid(),提及这些被调用方法的所有参数。
答案 0 :(得分:0)
经典案例,此前回答约378次:
this.someMethod()
这样的方法调用(仅等同于someMethod()
),因为this
是真实对象,而不是代理。没有代理使用意味着没有Spring AOP拦截。这是有据可查的。在Spring AOP手册中查找“自我调用”一词。一些评论:
aspectjweaver
依赖项从1.8.1升级到1.8.10,其中包含许多错误修正和Java 8方面的小改进。aspectjrt
,因为它是aspectjweaver
的子集。前者对编译时编织很有用,而不适用于加载时编织。