我需要处理从带有注释的类的公共方法中抛出的所有异常。我尝试使用Spring AOP。这是我的记录器:
@Aspect
public class Logger {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Pointcut("@annotation(loggable)")
public void isLoggable(Loggable loggable) {
}
@AfterThrowing(pointcut = "isLoggable(loggable)", throwing = "e")
public void afterThrowing(Loggable loggable, Exception e) throws Throwable {
log.error("AFTER", e);
}
@loggable
是我的注释。
然后,我将@enableaspectJAutoProxy
注释添加到我的配置类中。
首先,我尝试注释一些引发异常的方法。它工作得很好,但是我如何才能使这种工作用于用@loggable
注释注释的类中的所有公共方法呢?
您可以像这样创建方面,其中@logme
是注释:@pointcut(“execution(@logme**(..))”)
以匹配所有公共方法。
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
@Aspect
@Component
public class LogExecutionTime {
private static final String LOG_MESSAGE_FORMAT = "%s.%s execution time: %dms";
private static final Logger logger = LoggerFactory.getLogger(LogExecutionTime.class);
@Pointcut("execution(@LogMe * *(..))")
public void isAnnotated() {}
/**
* Method will add log statement of running time of the methods which are annotated with @LogMe
* @param joinPoint
* @return
* @throws Throwable
*/
@Around("isAnnotated()")
public Object logTimeMethod(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object retVal = joinPoint.proceed();
stopWatch.stop();
logExecutionTime(joinPoint, stopWatch);
return retVal;
}
private void logExecutionTime(ProceedingJoinPoint joinPoint, StopWatch stopWatch) {
String logMessage = String.format(LOG_MESSAGE_FORMAT, joinPoint.getTarget().getClass().getName(), joinPoint.getSignature().getName(), stopWatch.getTotalTimeMillis());
logger.info(logMessage.toString());
}
}
有可能通过AOP(使用Spring aop、aspectj等)审核用@Service或@Repository注释的类的所有公共方法,或者我认为是类级别而不是方法级别的注释?我想有这样的东西:
我正在实现来传递和获取来自任何类或片段的数据,并且还订阅了一个方法来获取即时更改的数据...但是我收到了以下错误消息: 组织。绿色机器人。事件巴士。EventBusException:订阅者类java。Boolean及其超类没有带有@Subscribe注释的公共方法 我已经订阅了github在这里展示的方法 代码片段 我只发布了应用程序所需的代码,因为这里不需要其他代码 适配器 更新活动类 新错误
我正在使用来控制的状态,但是我在执行过程中遇到了一个错误。 原因:org.greenrobot.eventbus.事件总线异常:订阅者类maa. Mainactive及其超类没有带有@Subcribe注释的公共方法 无线电经理。JAVA
我正在为我的spring boot项目使用swagger注释。 我想为控制器的每个资源返回一个公共响应代码契约。 在文件中:https://github.com/swagger-api/swagger-core/wiki/annotations#apiresponses-apiresponse他们谈论@ApiResponses,但我不能将注释放在类级别。 以下是我所做的: 但问题是和中的坏东西从未
我有两节课 使用Spring AOP,我需要包装: 如果注释放在类级别上,则对使用注释的所有公共方法的所有调用 这是我的切入点 这适用于的公共方法,但是当我调用时,未包装如何包含父方法?
我正在尝试使用Byte-Buddy对类中的所有公共方法进行注释,并使用自定义注释进行注释。 我已经尝试使用此处注释中的代码:使用Byte Buddy在运行时添加方法注释 Java版本:1.8。该应用程序用于测试微服务。应用程序正在通过Spring Boot运行。我尝试在我的应用程序中为所有需要的方法添加注释,注释的值取决于方法名称。 工作方法: 在使用JUnit@BeforeAll注释进行所有测试