见过的注解

本文介绍了SpringBoot中各层组件的划分(@Mapper,@Service,@Repository,@Component,@RestController),以及常见的注解如@Autowired,@Bean,Swagger中的API注解、事务管理(@Transactional)、MyBatis的Mapper注解、APIModel和参数注解等,展示了如何利用这些工具进行高效开发和API设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. @mapper描述数据层 (Mapper)

  2. @service描述业务层 (Service)
  3. @Repository标识持久层 / 数据访问层组件(Dao)
  4. @Component可以描述各种组件(当组件不好归类时)
  5. @RestController 描述控制层(Controller)并返回JSON数据类型,但不会再执行配置的视图解析器,也不会返回给jsp页面,返回值就是return里的内容。相当于@ResponseBody和@Controller的结合
  6. @Controller 描述控制层 
  7. @Bean 描述在方法上,把方法的返回值交给容器管理,不需要再手动调用该方法。
  8. @Autowired 按byType自动注入 获取对应的bean对象。如果注入的类型有多个实现类,则需要注入具体实现类的名称。
  9. @Resource 按byName自动注入 获取对应的bean对象
  10. @Value 注入普通类型属性。
  11. @Dict主要是实现 字符的转换,给前端提供想要的数据。dicCode = "主键",dictTable = "表名",dicText = "显示的字段名"
  12. @Excel 导出excel,一个列,是easyPOI里的注解
  13. @ApiModelProperty注解用于方法、字段,表示对model属性的说明或者数据操作更改
  14. @JsonFormat是在Jackson中定义的一个注解,是一个时间格式化注解。此注解用于属性上,作用是把DATE类型的数据转化成为我们想要的格式。
  15. @Description标记允许提供正在记录一般说明。描述可以包括 HTML 标记。如果启用了 Markdown 插件,它也可包括 Markdown 格式。
  16. @Author开头的注解,作者
  17. @Date开头的注解,日期
  18. @version乐观锁注解
  19. @transcational 注解是Spring 框架提供的声明式注解事务解决方案

    ,我们在开发中使用事务保证方法对数据库操作的原子性,要么全部成功,要么全部失败,在使用@Transactional注解时需要注意以下问题:

                 1. @Transactional  注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。

                 2. @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类,可以从Spring源码的DefaultTransactionAttribute类里找到判断方法rollbackOn。

  20. @Override
        public boolean rollbackOn(Throwable ex) {
            return (ex instanceof RuntimeException || ex instanceof Error);
        }


                 3. 使用rollbackFor 属性来定义回滚的异常类型,使用 propagation 属性定义事务的传播行为。如:   回滚Exception类的异常,事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事务。

    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)


                 4. @Transactional注解不能回滚被try{}catch() 捕获的异常。

                 5. @Transactional注解只能对在被Spring 容器扫描到的类下的方法生效。

           其实Spring事务的创建也是有一定的规则,对于一个方法里已经存在的事务,Spring 也提供了解决方案去进一步处理存在事务,通过设置@Tranasctional的propagation 属性定义Spring 事务的传播规则。

  21. @API 使用在类上,表明是swagger资源,@API拥有两个属性:value、tags

  22. @ApiParam使用在方法上或者参数上,字段说明;表示对参数的添加元数据(说明或是否必填等)name–参数名value–参数说明required–是否必填

  23. @ApiModel()使用在类上,表示对类进行说明,用于参数用实体类接收value–表示对象名description–描述

  24. @Slf4j注解,该注解的作用主要是操作在idea中的控制台中打印的日志信息。该注解相当于代替了以下的代码:private  final Logger logger = LoggerFactory.getLogger(当前类名.class);

  25. @Param注解是为SQL语句中参数赋值而服务的。

    作用就是给参数命名,比如在mapper里面某方法A(int id),当添加注解后A(@Param("userId") int id),也就是说外部想要取出传入的id值,只需要取它的参数名userId就可以了。将参数值传如SQL语句中,通过#{userId}进行取值给SQL的参数赋值。

  26. @ApiOperation

    @ApiOperation() 用于方法;表示一个http请求的操作

    @ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”);

    value:对该操作进行简单的描述,尽量控制在120字符以内。
    notes:对操作的详细描述。
    httpMethod:指定操作使用的HTTP方法类型,可选值 “GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“OPTIONS”和“PATCH”。
    tags:用来给操作打标签,Swagger UI 将在操作列表下面展示 tag 列表,每个 tag 下面展示拥有该 tag 的操作列表。(就是分组)

  27. @interface注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

    在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

  28. @PostMapping  注解是 Spring Boot 中用来声明 POST 请求处理方法的注解,它的作用有以下几个方面:

    声明方法为 POST 请求处理方法:@PostMapping 注解告诉 Spring Boot,这个方法是用来处理客户端发送的 POST 请求的。

    自动转换为 JSON 或 XML:@PostMapping 注解可以自动将请求体中的数据转换为 Java 对象,并将返回值转换为 JSON 或 XML 格式,方便客户端解析处理。

    简化代码:@PostMapping 注解可以大大简化 POST 请求处理方法的开发,减少代码量和冗余操作。

  29. @RequestMapping注解:声明请求的路径和请求方法
  30. @ResponseBody 注解:告诉 Spring Boot,返回值需要转换为 JSON 或 XML 格式。

  31. @GetMapping

    注解可以用于类和方法上,用于定义HTTP GET请求的URL路径。当客户端发送HTTP GET请求时,Spring Boot会自动将请求映射到具有相应URL路径的控制器方法上。
  32. @return
    一般写在方法的上面,说明该方法有返回值。只是起到一个说明作用
  33. @AutoLog在需要记录日志信息的方法上添加@AutoLog注解,通过配置的切面类,即可插入数据库对应的日志信息
  34. @PermissionData
    此注解是用来进行数据权限控制,配置角色授予权限规则,在进行查询的方法上添加 @PermissionData(pageComponent=“text/StudentsList”)注解
  35. @PutMapping和PostMapping作用等同,都是用来向服务器提交信息。如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。

  36. @PatchMappingpatch的目的是对资源数据打补丁或局部更新

  37. @DeleteMapping删除URL映射

  38. @Data是一种方便的快捷注释,它将@ToString、@EqualsAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能捆绑在一起:换句话说,@Data生成通常与简单POJO(普通旧Java对象)和bean关联的所有样板文件:所有字段的Getter,所有非最终字段的Setter,以及适当的toString、equals和hashCode实现,这些实现涉及类的字段,以及初始化所有最终字段的构造函数,以及所有没有使用@NonNull标记的初始化器的非最终字段,以确保字段永远不为null。

  39. spring AOP相关注解介绍:

    
    @Aspect:作用是把当前类标识为一个切面供容器读取
     
    @Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
    @Around:环绕增强,相当于MethodInterceptor
    @AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
    @Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
    @AfterThrowing:异常抛出增强,相当于ThrowsAdvice
    @After: final增强,不管是抛出异常或者正常退出都会执行
    

  40. @Pointcut注解表达式,标准的Aspectj Aop的pointcut的表达式类型是很丰富的,但是Spring Aop只支持其中的9种,外加Spring Aop自己扩充的一种一共是10种类型的表达式,分别如下。

    execution:一般用于指定方法的执行,用的最多。
    within:指定某些类型的全部方法执行,也可用来指定一个包。
    this:Spring Aop是基于代理的,生成的bean也是一个代理对象,this就是这个代理对象,当这个对象可以转换为指定的类型时,对应的切入点就是它了,Spring Aop将生效。
    target:当被代理的对象可以转换为指定的类型时,对应的切入点就是它了,Spring Aop将生效。
    args:当执行的方法的参数是指定类型时生效。
    @target:当代理的目标对象上拥有指定的注解时生效。
    @args:当执行的方法参数类型上拥有指定的注解时生效。
    @within:与@target类似,看官方文档和网上的说法都是@within只需要目标对象的类或者父类上有指定的注解,则@within会生效,而@target则是必须是目标对象的类上有指定的注解。而根据笔者的测试这两者都是只要目标类或父类上有指定的注解即可。
    @annotation:当执行的方法上拥有指定的注解时生效。
    bean:当调用的方法是指定的bean的方法时生效。

  41. @RestControllerAdvice

    是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。@RestControllerAdvice的特点:

    通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。
    注解了@RestControllerAdvice的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。
    @RestControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上。
    @ExceptionHandler:用于指定异常处理方法。当与@RestControllerAdvice配合使用时,用于全局处理控制器里的异常。
    @InitBinder:用来设置WebDataBinder,用于自动绑定前台请求参数到Model中。
    @ModelAttribute:本来作用是绑定键值对到Model中,当与@ControllerAdvice配合使用时,可以让全局的@RequestMapping都能获得在此处设置的键值对
    

  42. @ResponseStatus注解是spring-web包中提供的一个注解,具有valuecodereason 三个属性。@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中,当修饰一个类的时候,通常修饰的是一个异常类。
  43. meta-annotation(元注解

    他们分别是:@Target,@Reteniton,@Documented,@Inherited.我们可以使用这4个元注解来对我们自定义的注解类型进行注解

    @Target注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方)

    @Reteniton注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时)。

    @Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。

    @Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被Inherited修饰的注解,则其子类将自动具有该注解。

  44. @Select是MyBatis中的注解之一,用于标记查询语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Select注解时,需要在注解中指定SQL语句
  45. @Insert

    作用:标记插入语句

    @Insert是MyBatis中的注解之一,用于标记插入语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Insert注解时,需要在注解中指定SQL语句

  46. @Update

    作用:标记更新语句。

    @Update是MyBatis中的注解之一,用于标记更新语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Update注解时,需要在注解中指定SQL语句,

  47. @Delete

    作用:标记删除语句

    @Delete是MyBatis中的注解之一,用于标记删除语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Delete注解时,需要在注解中指定SQL语句

  48. @Results

    作用:用于指定多个@Result注解。

    @Results是MyBatis中的注解之一,用于标记结果集映射。该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@Results注解时,需要指定映射规则

  49. @Result

    作用:用于指定查询结果集的映射关系。

    @Result是MyBatis中的注解之一,用于标记单个属性与结果集中的列之间的映射关系。该注解可以用于接口方法或XML文件中,通常与@Results注解一起使用。使用@Result注解时,需要指定映射规则

  50. @ResultMap

    作用:用于指定查询结果集的映射关系。

    @ResultMap是MyBatis中的注解之一,用于标记结果集映射规则。该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@ResultMap注解时,需要指定映射规则

  51. @Getter/@Setter作用于类,覆盖默认toString方法,可以通过of属性限定显示某些字段,通过exclude属性排除默写字段

  52. @Builder作用于类上,将类转变成建造者模式

  53. @NonNull作用于成员变量和参数中,标识不能为空,否则抛出空指针异常

  54. @EqualsAndHashCode作用于类,覆盖默认的equals和hashCode方法

  55. @ToString作用于类,覆盖默认toString方法,可以通过of属性限定显示某些字段,通过exclude属性排除默写字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值