/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

// 该类所属的包名，表明其位于商城项目的通用（common）注解（annotation）包下，通常用于存放一些项目中自定义的、具有通用性的注解，方便在多个地方复用，以实现特定的功能需求。
// 这里的这个注解可能用于记录系统相关操作的日志信息，在对应的方法执行时进行日志记录等相关操作。
package com.yami.shop.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * SysLog注解是一个自定义的Java注解，用于标记需要进行系统日志记录的方法。通过在方法上添加这个注解，可以方便地指定哪些方法的执行情况需要被记录下来，
 * 便于后续进行系统操作的审计、故障排查以及业务流程分析等操作，为系统的维护和监控提供了有力的支持。
 *
 * @author lanhai
 */
// @Target注解用于指定该自定义注解可以应用的目标元素类型，这里ElementType.METHOD表示该SysLog注解只能应用在方法上，
// 即可以在方法声明前添加该注解来标记这个方法需要进行相关的系统日志记录操作。
@Target(ElementType.METHOD)
// @Retention注解用于指定注解的保留策略，RetentionPolicy.RUNTIME表示该注解在运行时仍然保留，可以通过反射机制在运行时获取到该注解的相关信息，
// 这样就能在程序运行期间根据注解的配置来决定是否以及如何进行系统日志记录等操作。
@Retention(RetentionPolicy.RUNTIME)
// @Documented注解用于表示该注解在生成JavaDoc文档时会被包含进去，使得在生成的文档中能够看到该注解的相关信息，方便其他开发人员了解该注解的存在和作用。
@Documented
// 使用@interface关键字定义了一个名为SysLog的自定义注解，它可以像其他Java内置注解一样被应用在相应的目标元素（这里是方法）上。
public @interface SysLog {

    // 定义了一个名为value的注解元素，它是一个字符串类型，并且默认值为空字符串。
    // 在使用该注解时，如果没有为value元素指定具体的值，就会使用这个默认的空字符串。
    // 这个元素可能用于传递一些与日志记录相关的额外信息，比如日志的简要描述等内容，具体用途取决于在代码中对该注解的解析和使用逻辑。
    String value() default "";
}