一、Spring相关注解
- @Autowired:这是Spring提供的一个非常方便的注解,用于自动装配bean。它可以应用于字段、构造函数和方法参数等,Spring容器会自动寻找匹配的bean并注入。这样,开发者无需手动编写繁琐的setter注入代码。
- @Component:这是Spring提供的一个泛化的概念注解,表示一个类是一个Spring组件。当使用基于注解的配置和类路径扫描时,这些类会被视为自动检测的候选对象。
- @Value:这个注解用于注入配置文件中的值或表达式的结果到类的字段或方法中。
- @Configuration:这个注解用于定义配置类,它允许使用Java代码替代XML文件来定义bean。
- @Bean:通常与@Configuration一起使用,用于定义一个bean。Spring容器会管理这些bean的生命周期。
- @RequestMapping:在控制器层中,@RequestMapping用于映射web请求到特定的处理器函数。它可以用于类或方法上。
- @Controller和@RestController:这两个注解用于标识一个类为控制器层组件。@Controller通常与视图解析器一起使用,返回视图名称;而@RestController则返回JSON或XML等数据,用于构建RESTful风格的Web服务。
- @PathVariable:用于获取URI模板变量值,即URI中{}中的值。
- @Qualifier:与@Autowired配合使用,用于指定要注入的Bean的名称或限定符。
- @Service:用于标识服务层
- @Controller: 描述控制层
- @Repository:描述数据访问层
-
@ComponentScan:用于配置组件扫描的路径,Spring会扫描该路径下的类,并将符合条件的类注册为Spring容器中的Bean。
-
@Profile:用于指定组件在哪个环境(profile)下被注册,可以实现不同环境下使用不同的配置。
-
@Lazy:用于延迟初始化Bean,即Spring容器启动时不会立即创建该Bean的实例,而是在首次使用时才创建。
-
@Scope:用于定义Bean的作用域,例如singleton(单例)、prototype(原型)、request(请求作用域)、session(会话作用域)等。
-
@Async:用于声明异步方法,使得被标注的方法将异步执行。
-
@Transactional:用于声明事务性方法,可以指定事务的传播行为、隔离级别、只读属性等。
-
@Import:用于导入其他配置类,将其他配置类中的Bean定义合并到当前配置类中。
-
@ImportResource:用于导入传统的Spring XML配置文件,使得XML中定义的Bean可以与基于Java的配置类定义的Bean一起使用。
-
@PostMapping 注解是 Spring Boot 中用来声明 POST 请求处理方法的注解,它的作用有以下几个方面:
声明方法为 POST 请求处理方法:@PostMapping 注解告诉 Spring Boot,这个方法是用来处理客户端发送的 POST 请求的。
自动转换为 JSON 或 XML:@PostMapping 注解可以自动将请求体中的数据转换为 Java 对象,并将返回值转换为 JSON 或 XML 格式,方便客户端解析处理。
简化代码:@PostMapping 注解可以大大简化 POST 请求处理方法的开发,减少代码量和冗余操作。
-
@RequestMapping注解:声明请求的路径和请求方法
-
@ResponseBody 注解:告诉 Spring Boot,返回值需要转换为 JSON 或 XML 格式。
-
@GetMapping注解可以用于类和方法上,用于定义HTTP GET请求的URL路径。当客户端发送HTTP GET请求时,Spring Boot会自动将请求映射到具有相应URL路径的控制器方法上。
-
@PutMapping和@PostMapping作用等同,都是用来向服务器提交信息。如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。
-
@PatchMapping的目的是对资源数据打补丁或局部更新
-
@DeleteMapping删除URL映射
-
@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。
- @ResponseStatus注解是
spring-web
包中提供的一个注解,具有value
、code
、reason
三个属性。@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中,当修饰一个类的时候,通常修饰的是一个异常类。 - @transcational注解是Spring 框架提供的声明式注解事务解决方案
,我们在开发中使用事务保证方法对数据库操作的原子性,要么全部成功,要么全部失败,在使用@Transactional注解时需要注意以下问题:
1. @Transactional 注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
2. @Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类,可以从Spring源码的DefaultTransactionAttribute类里找到判断方法rollbackOn。
@Overridepublic 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 事务的传播规则。
二、Mybatis相关注解
-
@mapper描述数据层 (Mapper),这个注解告诉MyBatis这个接口是用于执行SQL语句的。
-
@Select:用于配置查询操作的SQL语句。
-
@Insert:用于配置插入操作的SQL语句。
-
@Update:用于配置更新操作的SQL语句。
-
@Delete:用于配置删除操作的SQL语句。
-
@Results 和 @Result:用于设置结果集合和结果。这两个注解通常一起使用,用于定义SQL查询结果到Java对象的映射关系。
-
@ResultMap:用于引用结果集合。当结果映射比较复杂时,可以使用@ResultMap注解来引用一个预先定义好的结果映射。
-
@SelectKey:用于获取最新插入的记录的ID。这在需要获取自增主键或其他数据库生成的键值时非常有用。
-
@Param:这个注解用于在Mapper接口方法中标识参数,尤其是当方法有多个参数时。这可以帮助MyBatis区分参数,以便在SQL语句中正确地引用它们。
-
@Options:这个注解用于配置一些全局的选项,比如是否使用生成的键(如自增主键),以及是否刷新缓存等。
-
@One 和 @Many:这两个注解通常用于处理一对一和一对多的关联查询。它们可以帮助开发者在单个查询中加载相关的对象或对象集合。
三、Lombok 相关注解
-
@Data是一种方便的快捷注释,它将@ToString、@EqualsAndHashCode、@Getter/@Setter和@RequiredArgsConstructor的功能捆绑在一起:换句话说,@Data生成通常与简单POJO(普通旧Java对象)和bean关联的所有样板文件:所有字段的Getter,所有非最终字段的Setter,以及适当的toString、equals和hashCode实现,这些实现涉及类的字段,以及初始化所有最终字段的构造函数,以及所有没有使用@NonNull标记的初始化器的非最终字段,以确保字段永远不为null。
-
@Getter 和 @Setter:这两个注解分别为类的字段生成getter和setter方法。如果只需要为某些字段生成getter或setter方法,而不是全部字段,那么可以使用这两个注解替代@Data。
-
@NoArgsConstructor、@AllArgsConstructor 和 @RequiredArgsConstructor:这三个注解用于生成类的构造函数。@NoArgsConstructor生成一个无参构造函数,@AllArgsConstructor生成一个包含所有字段的构造函数,@RequiredArgsConstructor生成一个包含final和非null字段的构造函数。
-
@Log4j 或 @Slf4j:这些注解用于在类中生成日志对象,方便进行日志记录。
-
@Builder:这个注解用于生成构建者模式的代码,使得对象构建更加灵活和易读。
-
@Cleanup:这个注解用于自动管理资源,它会在try语句块结束后自动关闭实现了AutoCloseable或Closeable接口的资源。
-
@SneakyThrows:这个注解用于在方法上抛出异常,而不需要在方法签名中显式声明。
-
@Accessors:这个注解用于修改getter和setter方法的默认行为,比如链式调用、设置字段访问级别等。
-
@Value:类似于@Data注解,但它会将所有字段默认为final修饰,并且不会生成setter方法。
-
@ToString:这个注解用于生成类的toString方法,用于返回对象的字符串表示形式。它会自动包含类的所有字段。
-
@EqualsAndHashCode:这个注解用于生成类的equals方法和hashCode方法。默认情况下,它会使用类的所有非静态和非瞬态字段进行比较。也可以指定只使用某些字段。
-
@NonNull:这个注解用于字段或方法参数上,用于确保该字段或参数在运行时非空。如果为null,则会抛出NullPointerException。
-
@Synchronized:这个注解用于方法上,为方法提供同步锁,类似于synchronized关键字的功能。
-
@Wither:这个注解用于生成一个返回当前对象副本的新方法,但其中一个字段的值被替换。
-
@Experimental:这个注解用于标记某些可能还在实验阶段的特性或API,以提醒使用者注意。
四、Spring AOP相关注解
-
@Aspect:用于定义一个切面类。切面类通常包含一些通知(Advice)和切点(Pointcut)的定义,用于在程序的特定位置插入横切关注点(cross-cutting concerns)的代码。
-
@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的方法时生效。
-
@Before:用于定义前置通知。前置通知会在切点方法执行之前执行,通常用于执行一些前置逻辑,如日志记录、权限校验等。
-
@After:用于定义后置通知。后置通知会在切点方法执行之后执行,无论方法执行是否成功。它通常用于执行一些清理工作或记录方法执行后的状态。
-
@AfterReturning:用于定义返回通知。返回通知会在切点方法正常执行完毕后执行,通常用于处理方法的返回值或执行一些后置逻辑。
-
@AfterThrowing:用于定义异常通知。异常通知会在切点方法抛出异常时执行,通常用于处理异常或记录异常信息。
-
@Around:用于定义环绕通知。环绕通知会包围切点方法的执行,可以在方法执行前后插入自定义的逻辑,甚至控制方法是否执行。
-
@Order:这个注解用于定义组件(包括切面)的执行顺序。在AOP中,它特别用于指定切面的执行顺序。通过给@Order注解提供一个整数值(通常是负数或正数),你可以控制多个切面之间的优先级。值越小,优先级越高,切面将越先执行。
例如,如果你有两个切面A和B,并且你想让切面A在切面B之前执行,你可以给切面A的@Order注解分配一个比切面B更小的值。
五、meta-annotation(元注解)
他们分别是:@Target,@Reteniton,@Documented,@Inherited.我们可以使用这4个元注解来对我们自定义的注解类型进行注解
-
@Target注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方)
- @Reteniton注解的作用是:描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时)。
- @Documented注解的作用是:描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
- @Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被Inherited修饰的注解,则其子类将自动具有该注解。
六、Swagger相关注解
-
@Api:用于描述API接口的基本信息。
value
:接口名称,必填项。description
:接口描述,非必填项。tags
:接口标签,用于对接口进行分类,非必填项。notes
:接口说明,非必填项。response
:接口返回结果。
-
@ApiOperation:用于描述API接口的操作。
value
:操作的简要说明。notes
:操作的详细说明。response
:返回的对象类型。
-
@ApiImplicitParam:用于描述单个请求参数。
name
:参数名。value
:参数的简要说明。required
:参数是否必须。dataType
:参数类型。paramType
:参数所在位置(如path、query等)。
-
@ApiImplicitParams:用于描述多个请求参数,包含多个@ApiImplicitParam注解。
-
@ApiResponses:用于描述API接口可能返回的响应。
-
@ApiResponse:用于描述API接口的一个响应。
code
:响应码。message
:响应消息。response
:响应对象类型。
-
@ApiModel:用于描述一个API数据模型。
value
:模型的名称。description
:模型的描述。
-
@ApiModelProperty:用于描述API数据模型的属性。
value
:属性的简要说明。name
:属性名。dataType
:属性类型。required
:属性是否必须。example
:属性值的示例。
六、其他常用注解
- @Override: 表明该方法覆盖了父类中的方法。
- @FunctionalInterface: 表明一个接口是函数式接口,只能有一个抽象方法。
-
@interface注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。
在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。
- @return:通常出现在方法的文档注释中,用于说明方法的返回值,并非Java的一个注解,而是Javadoc的一部分。
- @Dict主要是实现 字符的转换,给前端提供想要的数据。dicCode = "主键",dictTable = "表名",dicText = "显示的字段名"
- @JsonFormat是在Jackson中定义的一个注解,是一个时间格式化注解。此注解用于属性上,作用是把DATE类型的数据转化成为我们想要的格式。
- @Description、@Author、@Date开头的注解分别表示提供记录的一般说明、标记作者信息、标记日期信息。
- @version乐观锁注解,用于版本控制。
- @Excel 导出excel,一个列,是easyPOI里的注解