英文:
i cannot see the aspect logs when i run the method to be intercepted
问题
这是我的代码,只显示在IntelliJ中执行方法时的日志记录
INFO: 发布评论:演示评论。还添加了依赖项,但我仍然看不到错误在哪。
package com.alpha;
import com.alpha.exampleApp.Comment;
import com.alpha.servoces.CommentServoce;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
var context = new AnnotationConfigApplicationContext(ComponentConfig.class);
var comment = new Comment();
comment.setAuthor("Laurentiu");
comment.setText("演示评论");
var commentServoce = context.getBean(CommentServoce.class);
commentServoce.publishComment(comment);
}
}
这是切面类->
package com.alpha;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import java.util.Arrays;
import java.util.logging.Logger;
@Aspect
public class LogAspect {
private Logger logger = Logger.getLogger(LogAspect.class.getName());
@Around("execution(* com.alpha.servoces.*.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
logger.info("方法 " + methodName +
" 参数 " + Arrays.asList(arguments) +
" 将被执行");
Object returnedByMethod = joinPoint.proceed();
logger.info("方法执行并返回 " + returnedByMethod);
return returnedByMethod;
}
}
这是我的配置类->
package com.alpha;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.alpha.servoces")
public class ComponentConfig {
@Bean
public LogAspect loggingAspect(){
LogAspect logAspect = new LogAspect();
return logAspect;
}
}
这是我希望拦截方法的类->
package com.alpha.servoces;
import com.alpha.exampleApp.Comment;
import org.springframework.stereotype.Service;
import java.util.logging.Logger;
@Service
public class CommentServoce {
private Logger logger = Logger.getLogger(CommentServoce.class.getName());
public String publishComment(Comment comment) {
logger.info("发布评论:" + comment.getText());
return "成功";
}
}
我想通过Spring中的切面拦截方法来查看日志,但我无法看到日志。
英文:
thats my code and this is only showing the logs as method is executed in intellij
INFO: Publishing comment: Demo comment. Also added the dependencies but still i cant see whats the error.
package com.alpha;
import com.alpha.exampleApp.Comment;
import com.alpha.servoces.CommentServoce;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
var context = new AnnotationConfigApplicationContext(ComponentConfig.class);
var comment = new Comment();
comment.setAuthor("Laurentiu");
comment.setText("Demo comment");
var commentServoce = context.getBean(CommentServoce.class);
commentServoce.publishComment(comment);
}
}
this is aspect class->
package com.alpha;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import java.util.Arrays;
import java.util.logging.Logger;
@Aspect
public class LogAspect {
private Logger logger = Logger.getLogger(LogAspect.class.getName());
@Around("execution(* com.alpha.servoces.*.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
logger.info("Method " + methodName +
" with parameters " + Arrays.asList(arguments) +
" will execute");
Object returnedByMethod = joinPoint.proceed();
logger.info("Method executed and returned " + returnedByMethod);
return returnedByMethod;
}
}
this is my config class->
package com.alpha;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.alpha.servoces")
public class ComponentConfig {
@Bean
public LogAspect loggingAspect(){
LogAspect logAspect = new LogAspect();
return logAspect;
}
}
this is the class in which i want the method intercepted->
package com.alpha.servoces;
import com.alpha.exampleApp.Comment;
import org.springframework.stereotype.Service;
import java.util.logging.Logger;
@Service
public class CommentServoce {
private Logger logger = Logger.getLogger(CommentServoce.class.getName());
public String publishComment(Comment comment) {
logger.info("Publishing comment: " + comment.getText());
return "SUCCESS";
}
}
i wanted to see the logs by intercepting the method through aspects in spring but i couldnt see the logs
答案1
得分: 1
只需在您的 ComponentConfig
类上添加 @EnableAspectJAutoProxy
注解,拦截功能就会生效。
英文:
Just annotate your ComponentConfig
class with @EnableAspectJAutoProxy
and your interception will work
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论