计算机系统应用教程网站

网站首页 > 技术文章 正文

spring中常用注解

btikc 2024-09-14 00:45:20 技术文章 12 ℃ 0 评论

一、启动类上注解

@EnableCustomConfig
@EnableCustomSwagger2
@EnableRyFeignClients
@SpringBootApplication
@MapperScan("com.xx.mapper")
@EnableScheduling
public class SystemApplication {
    public static void main(String[] args) {
        SpringApplication.run(SystemApplication.class, args);
    }
}

1.@EnableCustomConfig

@EnableCustomConfig:这是一个自定义的注解,用于启用自定义的配置。它可能是你的应用程序中定义的一个自定义注解,用于加载特定的配置。

2.@EnableCustomSwagger2

@EnableCustomSwagger2:这是一个自定义的注解,用于启用自定义的Swagger2配置。Swagger2是一个用于构建、文档化和使用RESTful风格API的工具。通过使用@EnableCustomSwagger2注解,你可以启用自定义的Swagger2配置。

3.@EnableRyFeignClients

@EnableRyFeignClients:这是一个自定义的注解,用于启用RyFeign客户端。RyFeign是Spring Cloud Feign的一个扩展,用于实现微服务之间的远程调用。通过使用@EnableRyFeignClients注解,你可以启用RyFeign客户端,并配置相应的远程服务接口。

4.@SpringBootApplication

@SpringBootApplication:这是一个Spring Boot的核心注解,用于标识一个主要的Spring Boot应用程序。它会自动配置应用程序,并扫描并注册所有带有@Component注解的类。

5.@MapperScan

@MapperScan:这是MyBatis框架中的一个注解,用于扫描并注册MyBatis的Mapper接口。通过在@MapperScan注解中指定需要扫描的Mapper接口的包路径,可以自动注册这些接口的实现。

6.@EnableScheduling

@EnableScheduling注解是Spring框架中的一个注解,用于启用定时任务的功能。通过在Spring Boot应用的配置类上添加@EnableScheduling注解,可以将应用中的定时任务自动注册到Spring容器中,从而实现定时任务的执行。

使用@EnableScheduling注解后,可以在方法上使用@Scheduled注解来指定方法的执行时间。@Scheduled注解可以接收cron表达式、固定时间间隔、固定延迟时间等参数,用于定义定时任务的执行规则。

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling
public class MyScheduledTask {

    @Scheduled(cron = "0 0 12 * * ?") // 每天中午12点执行
    public void doSomething() {
        // 定时任务要执行的操作
    }
}

二、实体上相关注解

@TableName("table")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "实体属性", description = "实体描述")
public class Person{
    @ApiModelProperty("表ID")
    @TableId(value = "ID",type = IdType.ASSIGN_ID)
    private String id;

    @ApiModelProperty("用户名称")
    @TableField(exist = false)
    private String createName;


    //创建时间
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT,jdbcType = JdbcType.DATE)
    private Date createTime;

    @Excel(name = "是否导出")
    private String msg;

	前后台获取转为json指定时间格式
    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
    @Excel(name = "接收时间", width = 30, dateFormat = "yyyy-MM-dd  HH:mm:ss")
    private Date receivedtime;


    /** 字典类型 */
    @Excel(name = "字典类型")
    private String dictType;


    @NotBlank(message = "字典类型不能为空")
    @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
    public String getDictType()
    {
        return dictType;
    }
}

说明:

1.@TableName

@TableName和表对应的实体,表名。

2. @Data

@Data注解是Lombok库中的一个注解,它可以自动为类生成一些通用的方法,如getters和setters、equals、hashCode和toString等。

3. @EqualsAndHashCode*(callSuper = true)

@EqualsAndHashCode(callSuper = true)是@Data注解的一部分。它的作用是在生成equals和hashCode方法时,包括父类的属性。
默认情况下,@EqualsAndHashCode只会考虑当前类的属性,而不会考虑继承自父类的属性。
通过设置callSuper参数为true,可以让生成的equals和hashCode方法也考虑父类的属性,从而实现更全面的对象比较和哈希码生成。

4. @ToString(callSuper = true)

@ToString(callSuper = true)是@Data注解中的一个属性,用于在生成toString方法时包括父类的字段。
默认情况下,@ToString生成的toString方法只包括当前类的字段,不包括父类的字段。通过设置callSuper属性为true,可以在生成的toString方法中包括父类的字段。

@Data
public class Parent {
    private String parentField;
}

@Data
public class Child extends Parent {
    private String childField;
}

public static void main(String[] args) {
    Child child = new Child();
    child.setParentField("parent");
    child.setChildField("child");
    
    System.out.println(child.toString());
}
输出结果为:Child(parentField=parent, childField=child)

如果在Child类上使用了@ToString(callSuper = true),
则输出结果为:Child(super=Parent(parentField=parent), childField=child)。
可以看到,通过设置callSuper属性为true,toString方法中包含了父类Parent的字段。

5. @Builder

@Builder是Lombok库中提供的注解之一,它可以自动生成构建器模式的代码。
过这个生成的Builder类,可以链式地设置对象的属性值,并最终通过调用build()方法来构建对象。

Person person = Person.builder()
                .name("John")
                .age(25)
                .address("123 Main St")
                .build();

和@Accessors(chain = true)区别,通过new出对象进行set。
@Accessors(chain = true) 是一个Lombok注解,用于生成链式调用方法。

Person person = new Person()
    .setName("John")
    .setAge(25);

6.@NoArgsConstructor

@NoArgsConstructor是Lombok库中的一个注解,用于自动生成一个无参构造方法。
可以在类中继续定义其他的构造方法,这些构造方法不会受到@NoArgsConstructor注解的影响。

7. @AllArgsConstructor

@AllArgsConstructor是一个Lombok注解,它可以帮助我们自动生成一个包含所有非静态属性的构造方法。这个构造方法可以用来初始化对象时直接为属性赋值,而不需要手动编写构造方法。

  Person person = new Person("John", 25);

8.@ApiModel

@ApiModel注解用于对模型类进行注释,指定模型的名称和描述信息。

和@Api和@ApiOperation区别,
@Api是用于Controller上。
@ApiOperation用于Controller的方法中。

9.@ApiModelProperty

@ApiModelProperty注解用于对模型类的属性进行注释,指定属性的描述信息。

10.@TableField(exist = false)

@TableField(exist = false) 注解用于标识实体类字段在数据库中不存在。
指定实体类中字段的数据库表字段名称,可以通过value属性进行设置,如:@TableField(value = “user_name”)

11.@TableField(fill = FieldFill.INSERT)

@TableField(fill = FieldFill.INSERT)是MyBatis-Plus框架中的一个注解属性,用于指定字段在插入数据时的填充策略。

12.@TableId

@TableId注解用于标识实体类的主键字段,其中value属性用于指定主键字段的名称,type属性用于指定主键生成策略。

13.@TableField

@JsonFormat是Jackson库中的一个注解,用于指定字段在序列化和反序列化时的日期格式。

注解属性说明:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
shape:指定序列化和反序列化的格式,这里的JsonFormat.Shape.STRING表示将日期以字符串形式进行处理。
pattern:指定日期的格式化模式,比如"yyyy-MM-dd HH:mm:ss"表示年月日时分秒的格式。
timezone:指定时区,默认为系统默认时区,这里的"GMT+8"表示东八区。

三、请求上类Controller的注解

@Api(tags = "这是一个注解请求类")
@RestController
@RequestMapping("/test/api")
@Validated
@Slf4j
public class TestController {
}

1.@Api

@Api这是一个使用Swagger注解的示例代码。@Api注解用于定义API的基本信息,其中的tags属性用于给API打上标签。

2.@RestController

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。

3.@RequestMapping

@RequestMapping注解用于映射请求的URL路径到相应的处理方法。

4.@Validated

@Validated是Spring框架中的一个注解,用于对方法参数进行验证。它可以与JSR-303标准中的校验注解(如@NotNull、@NotBlank、@Size等)一起使用,来验证方法参数的合法性。
通过在方法参数上添加@Validated注解,可以在方法执行前对参数进行校验,如果校验失败,则会抛出MethodArgumentNotValidException异常。这样可以确保参数的合法性,提高系统的安全性和稳定性。

 一些常用的字段验证的注解
https://github.com/gsjqwyl/JavaInterview/blob/master/interviewDoc/Java/%E6%A1%86%E6%9E%B6/SpringBoot%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3.md
@NotEmpty 被注释的字符串的不能为 null 也不能为空
@NotBlank 被注释的字符串非 null,并且必须包含一个非空白字符
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
@Email 被注释的元素必须是 Email 格式。
@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=)被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction)被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    @NotNull(message = "classId 不能为空")
    private String classId;

    @Size(max = 33)
    @NotNull(message = "name 不能为空")
    private String name;

    @Pattern(regexp = "((^Man$|^Woman$|^UGM$))", message = "sex 值不在可选范围")
    @NotNull(message = "sex 不能为空")
    private String sex;

    @Email(message = "email 格式不正确")
    @NotNull(message = "email 不能为空")
    private String email;

}

四、请求上Controller中方法的注解

@ApiOperation("方法上的注释")
@GetMapping("/user")
public String getUser(@RequestParam("id") int id) {
    // ...
}

1.@ApiOperation

@ApiOperation是Swagger框架中的一个注解,用于对接口方法进行文档化描述。通过在方法上添加@ApiOperation注解,可以为接口方法添加一个可读性强的注释,用于描述该方法的功能、输入参数、输出结果等相关信息。

2.@GetMapping、@PostMapping、@PutMapping、@DeleteMapping

@GetMapping是Spring框架中的一个注解,用于将HTTP的GET请求映射到指定的处理方法上。通过在方法上添加@GetMapping注解,并指定请求的路径,当收到对应路径的GET请求时,Spring框架会自动调用该方法进行处理并返回相应的数据。

类似的,还有@PostMapping、@PutMapping、@DeleteMapping等注解,
分别用于将HTTP的POST、PUT、DELETE请求映射到相应的处理方法上。

3.@RequestParam

@RequestParam(“id”)注解是Spring框架中用于获取请求参数的注解,用于将请求参数的值绑定到方法的参数上。

页面请求:
GET /user?id=123

4.@PathVariable

@PathVariable注解用于获取URL路径中的参数。它将URL路径的一部分作为参数值传递给方法。

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") int userId) {
    // 根据id获取用户信息
    return "User details";
}
页面请求:
GET /user/{id}
其中,{id}可以替换为具体的用户ID,例如:GET /user/123

5.@RequestBody

@RequestBody注解用于将请求体中的数据绑定到方法的参数上。

@PostMapping("/user")
public String getUser(@RequestBody User user) {
    // ...
}
POST /user
{请求体}

五、配置类注解和派生类注解

@Data
@RefreshScope
@Component
@ConfigurationProperties(prefix = "sql.interceptor")
public class SqlInterceptorConfig {
}

1.@RefreshScope

@RefreshScope注解是Spring Cloud中的一个注解,它用于实现配置文件的动态刷新。当配置文件发生改变时,使用了@RefreshScope注解的Bean会被重新创建,从而实现配置的动态更新。这个注解通常用于需要动态刷新配置的类上,比如配置类、服务类等。

在使用@RefreshScope注解时,需要注意以下几点:

需要在配置文件中添加spring.cloud.config.refresh=true,才能实现配置的动态刷新。
@RefreshScope注解只能用于Spring容器中托管的Bean上,不能用于普通的Java类。
需要使用Spring Cloud Config或者Nacos等服务进行配置的中心化管理,才能实现配置的动态刷新。

2.@ConfigurationProperties(prefix = “”)

@ConfigurationProperties是Spring Boot中用于将配置文件中以指定前缀开头的属性值注入到对应的类中的注解。和类中对应的相关字段进行对应注入

3.@Value

@Value(“${spring.redis.host}”)获取配置文件中对应的值。

4.@Configuration

@Configuration注解是Spring框架中的一个注解,用于标识一个类是一个配置类。配置类通常用于定义和配置Bean以及其他Spring相关的配置。

@Configuration注解的作用主要有以下几个方面:

声明配置类:
通过@Configuration注解,你可以将一个普通的Java类标识为一个配置类,告诉Spring容器要加载和解析该类。
通常搭配@Bean使用,创建Bean对象。
配置其他Bean。

5.@Bean

定义Bean:在配置类中,你可以使用@Bean注解来定义一个Bean,
Spring容器会根据该注解创建一个Bean对象,并将其添加到容器中。

配置其他Bean:配置类可以使用其他注解,
例如@ComponentScan、@Import等来配置其他的Bean,
从而实现自动扫描和加载、引入其他配置类等功能。

6.@Component

@Component作为一个@Component组件,你可以在Spring框架中使用。它是一个通用的注解,用于将类标记为Spring组件,使得Spring框架能够自动扫描并将其纳入到应用程序上下文中进行管理。通过@Component注解,你可以将类注册为一个Bean,从而可以在其他地方进行依赖注入或者通过Spring的容器获取实例。

@Component注解还有一些派生注解,比如
@Service、@Repository和@Controller,
它们分别用于标记类为服务、仓库和控制器。

7. @Service

@Service注解用于标识一个类作为服务层组件,表示该类提供业务逻辑的处理。通常在服务层的类上使用@Service注解,它会被Spring框架自动扫描并注入到其他需要调用该服务的地方。

8. @Repository

@Repository注解用于标识一个类作为数据访问层组件,表示该类用于与数据库进行交互。通常在数据访问层的类上使用@Repository注解,它会被Spring框架自动扫描并注入到其他需要进行数据库操作的地方。

9. @Controller

@Controller注解用于标识一个类作为控制器层组件,表示该类用于处理请求和响应。通常在控制器层的类上使用@Controller注解,它会被Spring框架自动扫描并处理请求映射。

10. @Autowired和@Resource

@Autowired和@Resource都是用于依赖注入的注解,但在使用上有一些区别。

@AutowiredSpring框架提供的注解,它可以根据类型自动装配对应的Bean,并将其注入到目标对象中。
当有多个相同类型的Bean时,可以通过@Qualifier注解指定具体的Bean名称。

@ResourceJava EE提供的注解,它可以根据名称自动装配对应的Bean,并将其注入到目标对象中。
当没有指定name属性时,它会根据属性的名称进行匹配。如果指定了name属性,它会根据指定的名称进行匹配。

在使用上,@Autowired注解比较常用,它更加灵活且简洁,
可以直接在字段、构造方法、Setter方法和方法参数上使用。
而@Resource注解主要用于字段和方法参数上。

六、xml相关注解

import javax.xml.bind.annotation.*;
@XmlRootElement(name="TEST")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder= {"子项","子项","子项","子项","子项","子项"})
public class BackData {
    #用在class,类名和xml对应xml转换和实体对应
    @XmlElement(name="PTime")
    private String pTime;


   #JSON和实体互相转换
   @JSONField(name = "flightId")
    private String fid;
}

1. @XmlAccessorType

@XmlAccessorType:用于指定Java类中属性与XML元素之间的映射关系。value属性指定了访问类型,XmlAccessType.FIELD表示使用属性访问类型,将类中的字段作为XML元素进行序列化和反序列化。

2. @XmlAccessorType

@XmlType:用于指定Java类在XML中的类型信息。propOrder属性指定了Java类中属性在XML中的序列化顺序。

3. @JSONField

@JSONField(name = “flightId”)是阿里巴巴的fastjson库中的注解,它用于指定在将Java对象转换为JSON字符串时,JSON字段的名称

七、元注解

@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log
{
}

这是关于注解的元数据信息,包括@Target、@Retention和@Documented。

1. @Target

@Target注解指定了注解可以应用的目标元素类型。
在这个例子中,注解可以应用在参数和方法上。
ElementType.PARAMETER表示可以应用在方法参数上,ElementType.METHOD表示可以应用在方法上。

2. @Retention

@Retention注解指定了注解的保留策略。
在这个例子中,注解的保留策略是运行时(RetentionPolicy.RUNTIME),即注解在运行时仍然可用。

3. @Documented

@Documented注解表示注解将包含在JavaDoc文档中。

八、切面注解

在Spring中,切面相关的注解主要有以下几个:

@Aspect: 用于定义切面,通常与其他注解一起使用,标识一个类作为切面类。

@Pointcut: 用于定义切点,指定在哪些连接点上应用切面。可以通过表达式或方法名来定义切点。

@Before: 在方法执行前执行,用于定义前置通知。

@After: 在方法执行后执行,无论方法是否发生异常都会执行,用于定义后置通知。

@AfterReturning: 在方法执行后执行,只有方法正常返回时才会执行,用于定义返回通知。

@AfterThrowing: 在方法抛出异常后执行,用于定义异常通知。

@Around: 在方法执行前后执行,可以在方法执行前后添加额外的逻辑,用于定义环绕通知。

这些注解可以结合使用,通过在切面类中定义方法并使用相应的注解,实现对方法的增强逻辑,如日志记录、权限校验等。同时,可以通过切点表达式指定切入的具体方法。

九、其他注解

1. @Async

@Async注解是Spring框架中的一个注解,用于标记一个方法是异步执行的。当一个方法被@Async注解修饰后,该方法将会在调用时开启一个新的线程来执行,而不会阻塞当前线程的执行。这个注解通常用于需要提高系统性能或者需要异步执行的方法上。
使用@Async注解需要配置一个线程池来执行异步任务。在Spring Boot中,可以通过在配置类上添加@EnableAsync注解来启用异步任务的支持。然后,在需要异步执行的方法上添加@Async注解即可。

@Service
public class MyService {
    @Async
    public void asyncMethod() {
        // 异步执行的方法逻辑
    }
}

@Async注解只能用于public方法上,因为Spring通过代理来实现异步调用,而代理只能拦截public方法。

2. @Slf4j

@Slf4j是一个常用的Java注解,它是Lombok库提供的注解之一。通过在类上添加@Slf4j注解,可以在代码中直接使用log对象进行日志输出,无需再手动创建Logger对象。

3. @EnableTransactionManagement(proxyTargetClass = true)

是一个用于开启事务管理的注解。
在Spring中,事务管理是通过AOP(面向切面编程)来实现的。@EnableTransactionManagement注解告诉Spring开启事务管理的功能。它可以放在配置类上,用于启用基于注解的事务管理。

@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
@Slf4j
public class MybatisPlusConfig {
}

4.@Lazy

@Lazy是Spring框架中的一个注解,用于延迟加载Bean。默认情况下,Spring容器在启动时会创建所有的Bean并将其初始化,但有时候我们希望在真正使用该Bean时才进行创建和初始化,这时就可以使用@Lazy注解。

使用@Lazy注解可以将Bean的初始化过程延迟到第一次使用该Bean的时候。这样可以提高系统的性能,避免不必要的资源浪费。

@Lazy注解可以用于类级别,也可以用于方法级别。当用于类级别时,表示整个类的Bean都是延迟加载的;当用于方法级别时,表示该方法返回的Bean是延迟加载的。

5.@Order

@Order注解是Spring框架中的一个通用注解,用于指定bean的加载顺序。当一个应用中存在多个实现同一接口的bean时,可以使用@Order注解来确定它们的加载顺序。

@Order注解可以在类级别或方法级别上使用。在类级别上使用@Order注解会影响整个类中所有的bean。在方法级别上使用@Order注解只会影响特定的方法。

@Order注解的值可以是任意整数,其中值越小的bean会先被加载。如果多个bean具有相同的@Order值,则加载顺序是不确定的。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表