java用注解@annotation和切面@Aspect实现日志记录

1.日志切面定义

@Aspect
@Component
public class LogAspect {

    @Around(value = "@annotation(log)")
    public Object log(ProceedingJoinPoint joinPoint, Log log) throws Throwable {
        Object result = joinPoint.proceed();
        //do something else
        Map<String,Object> map = new HashMap<>();
        map.put("userDo",result);
        Object id = new SimpleTemplateEngine().createTemplate(log.id()).make(map);
        Object content = new SimpleTemplateEngine().createTemplate(log.content()).make(map);
        return result;
    }
}

2.日志注解定义

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Log {
    String id() default "";
    String content() default "";
}

3.实体类定义

@Data
public class UserDo {
    private Long id;
    private String userName;
    private int age;
}

4.接口和实现定义

public interface UserService {
    UserDo add(UserDo userDo);
}



@Component
public class UserServiceImpl implements UserService {
    @Override
    @Log(id = "${userDo.id}", content = "${userDo}")
    public UserDo add(UserDo userDo) {
        userDo.setId(1L);
        userDo.setUserName("张三");
        userDo.setAge(18);
        return userDo;
    }
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,使用@Around注解切片可以实现更细粒度的控制,包括在目标方法执行前、执行后以及捕获异常时执行一段代码。@Around注解通常与AspectJ等切面框架一起使用。 以下是一个使用@Around注解的示例: ```java @Aspect public class LoggingAspect { @Around("@annotation(Loggable)") // 在带有Loggable注解的方法执行前后执行 public Object aroundMethodExecution(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("Before method execution: " + joinPoint.getSignature().getName()); Object result; try { result = joinPoint.proceed(); // 调用目标方法 } catch (Exception e) { System.out.println("Exception caught: " + e.getMessage()); throw e; } System.out.println("After method execution: " + joinPoint.getSignature().getName()); return result; } } ``` 在上述示例中,使用了@Around注解和ProceedingJoinPoint参数来实现对目标方法的环绕增强。在方法执行前,我们可以执行一些预处理逻辑;然后通过调用`joinPoint.proceed()`来执行目标方法;最后,在方法执行后,我们可以执行一些后处理逻辑。如果目标方法抛出异常,我们可以在catch块中处理异常。 在需要增强的方法上添加Loggable注解即可使用切片: ```java @Loggable public void doSomething() { // 方法逻辑 } ``` 当调用doSomething方法时,切面类中的aroundMethodExecution方法会在方法执行前后被调用,并可以控制目标方法的执行。 需要注意的是,@Around注解可以更灵活地控制目标方法的执行,但也需要更多的代码来处理方法的执行和异常情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值