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;
    }
}

 

發佈了172 篇原創文章 · 獲贊 67 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章