Java常用注解

文章目录

  • 第一章、Java注解与元数据
    • 1.1)元数据与注解概念介绍
    • 1.2)Java注解的作用和使用
    • 1.3)注解的分类
  • 第二章、Mybatis框架常用注解
    • 2.1)Mybatis注解概览
    • 2.2)常用注解
      • @MapperScan
      • @Mapper
      • @Select
      • @Insert
      • @Update
      • @Delete
      • @Param
      • 结果集注解@Results、@Result、@resultMap
  • 第三章、Spring框架常用注解
    • 3.1)Spring Bean相关注解
      • @Configuration
      • @Component,@Controller,@Service,@Repository
      • @ComponentScan
      • @Autowired,@Inject,@Resource,@Qualifier,@Primary
      • @Scope
      • @Bean
      • @Value
    • 3.2)功能性注解
      • @EnableScheduling:
      • @Scheduled
      • @EnableAspetJautoProxy:
      • @Lazy
      • @Import:
      • @Profile
      • @Conditional
      • @Required
      • @CrossOrigin
    • 3.3)AOP相关注解
      • @Aspect 声明一个切面
  • 第四章、SpringMvc常用注解
      • @EnableWebMvc
    • 4.1)常见的处理 HTTP 请求
      • @RequestMapping
      • @GetMapping,@PostMapping,@DeleteMapping
      • @PutMapping,@PatchMapping
    • 4.2)前后端传值
      • @PathVariable
      • @RequestBody,@RequestHeader,
      • @RequestParam,@RequestPart
      • @ResponseBody
      • @ResponseStatus
      • @ExceptionHandler
      • @ModelAttribute
      • @SessionAttributes
      • @Transactional
      • @Scheduled
      • @Async
  • 第五章、SpringBoot常用注解
      • @SpringBootApplication
      • @EnableAutoConfiguration
      • @RestController
      • @RestControllerAdvice
      • @ConfigurationProperties
  • 第六章、json常用注解
      • @JsonIgnoreProperties
      • @JsonIgnore
      • @JsonFormat
      • @JsonSerialize
      • @JsonDeserialize
      • @JsonIgnoreType
      • @JsonProperty
  • 致谢

友情提醒:
先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。用到的资料都放在文章最末尾了(不过估计也没人看完这篇文章,太长了)

第一章、Java注解与元数据

1.1)元数据与注解概念介绍

①元数据概念:描述数据或信息资源等对象的数据,其使用目的在于:识别资源;评价资源;追踪使用过程中的变化;实现对使用资源的简单高效管理。

②Java中的元数据:描述代码间关系,或者代码与其他资源(例如数据库表)之间联系的数据。

③Java注解:又称java标注是在 JDK5 时引入的新特性,用于为Java代码提供元数据的标记,将元数据与程序元素(类、方法、成员变量等)进行关联。它提供了一种将元数据和程序代码组合在一起的方式,有助于将程序元数据与源代码分离开来,从而简化程序设计。

1.2)Java注解的作用和使用

注解的作用
①提供更多的程序元数据。可以为程序提供更多的信息,例如Java类的版本号、作者、方法的参数名称和类型等。
②简化程序设计,实现替代配置文件功能。注解在javaEE中占据了更重要的角色,尤其是在使用框架时,例如用来配置应用程序的任何切面,代替javaEE旧版中所残留的冗余代码和XML配置等等。Java注解可以使程序的设计更加简单,它实现了将元数据和程序代码分离开来。
③提供更好的可读性。更加清晰地表达程序的意图和目的
④实现自动化的代码生成。Java注解可以为程序自动生成一些代码,从而减少程序员的工作量,提高程序的开发效率。
⑤提供更加灵活的程序实现。Java注解可以应用到Java类、方法、属性、参数等元素上,从而为程序的设计和实现提供了更加灵活和可扩展的方式。

注解的简单使用
使用注解时,要在它前面增加“@”符号,Java注解的语法格式为@annotationName,其中annotationName是注解的名称。把注解当作修饰符修饰它支持的程序元素,它们可以用于类、方法、变量、参数和包等。
下面是使用注解的示例:表少MyClass类已经过时不再使用:

@Deprecated
public class MyClass {// ...
}

1.3)注解的分类

①JDK提供自带的内置注解,举例:

@Override :该注解用在方法前面,用来标识该方法是重写父类的某个方法。
@Deprecated :表示该⽅法已经过时,不建议使⽤但可以使⽤
@FunctionalInterfac :函数式接⼝ / 接⼝中只有⼀个抽象⽅法
@SuppressWarnings :表示抑制警告,阻止编译器发出某些警告信息。只是看不到警告,不代表没有警告
它可以有以下参数:deprecation :过时的类或方法警告。unchecked:执行了未检查的转换时警告。fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。path:在类路径、源文件路径等中有不存在的路径时的警告。serial:当在可序列化的类上缺少serialVersionUID定义时的警告。finally:任何finally子句不能完成时的警告。all:关于以上所有情况的警告。

②元注解,举例:
元注解是java API提供的,是用于修饰注解的注解,通常用在注解的定义上。
如下举例:

 @Retention它是被定义在一个注解类的前面,用来说明该注解的生命周期。它有以下参数:RetentionPolicy.SOURCE:指定注解只保留在源文件当中。RetentionPolicy.CLASS:指定注解只保留在class文件中。(缺省)RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间。
@Target它是被定义在一个注解类的前面,用来说明注解在哪⽤(默认可以放在任何元素之前)它有以下参数:ElementType.TYPE:声明在一个类、接口、枚举前。ElementType.FIELD:声明在一个类的字段前。ElementType.METHOD:在一个类的方法前。ElementType.PARAMETER:声明在一个方法参数前。ElementType.CONSTRUCTOR:声明在一个类的构造方法前。ElementType.LOCAL_VARIABLE:声明在一个局部变量前。ElementType.ANNOTATION_TYPE:声明在一个注解类型前。ElementType.PACKAGE:声明在一个包名前。
 @Inherited 表明该注解将会被子类继承。只有用在类元素(类,成员属性)上才有效果。
方法并不受此注释的影响。对于类来说,子类要继承父类的注解需要该注解被 @Inherited 标识。
对于成员属性和方法来说,非重写的都会保持和父类一样的注解,而被实现的抽象方法,被重写的方法都不会有父类的注解。
@Documented(了解): 表明在生成JavaDoc文档时,该注解也会出现在javaDoc文档中。
如果一个注解@GetMapping,被@Documented标注,那么被@GetMapping修饰的类,生成文档时,会显示@GetMapping。如果@GetMapping没有被@Documented标注,最终生成的文档中就不会显示@GetMapping。这里的生成文档指的JavaDoc文档!

③自定义注解
1、java的注解本质上是一个接口,而且是自动隐性的继承了java.lang.annotation.Annotation接口的接口。定义注解只能依靠@interface实现,而不能再通过主动继承Annotation接口去定义。并且不能再去继承别的类或是接口。
2、注解类型可以包含多个成员变量和方法,成员变量和方法的返回值类型可以是基本数据类型、字符串、枚举或其他注解类型。
3、参数成员只能用public 或默认(default) 这两个访问权修饰。
4、要获取类方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation 对象
5、自定义注解需要使用到元注解。

/*** 自定义注解*/
@Retention(RetentionPolicy.RUNTIME)//设置有效期
@Target({ElementType.TYPE,ElementType.METHOD})//设置作用目标
public @interface VIP {String value() default "默认值";int age() default 20;long id();String[] HOBBY();
}

第二章、Mybatis框架常用注解

2.1)Mybatis注解概览

Mybatis中的注解基本上都在org.apache.ibatis.annotations目录下:
在这里插入图片描述
Mybatis常用注解对应的目标和标签
在这里插入图片描述

2.2)常用注解

@MapperScan

为了集成Spring而写的注解。该注解主要是扫描某个包目录下的Mapper,将Mapper接口类交给Spring进行管理。

@SpringBootApplication
@MapperScan("com.example.mybatis.mapper")
public class Application {}

@Mapper

一个描述数据层接口(dao)的注解,用于告诉spring框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。目的就是为了不再写mapper映射文件 (UserMapper.xml)。简化编写xml的繁琐。

@Mapper
public interface UserMapper { User selectById(Integer id); }

@Select

@Select注解的目的是为了取代xml中的select标签,只作用于方法上面
@Select 注解会将注解中的 SQL 查询语句交给 Mybatis 框架进行解析和执行。Mybatis 会通过 #{} 占位符获取查询语句中的参数,并将这些参数传递给底层的 JDBC 驱动程序,最终执行 SQL 查询并返回查询结果。花括号里面的内容可以是字符串也可以是字符串数组

@Select({"select id,username,phone from db_user where id = #{key}"})
User selectUserByPrimaryKey(Long key);

复杂的判断需要使用标签

@Select("<script> select * from table where id = #{id} 
<when test='address !=null'> and address = #{address} 
</when> </script>")
Person selectPersonById(Integer id);

@Insert

和@Select查询标签同理,如果需要设置主键可以使用@Option注解

    //添加@Options(useGeneratedKeys = true, keyProperty = "aid")@Insert("insert into author (aid,aage,atel,aaddress)values(#{aid},#{aage},#{atel},#{aaddress})")int insert(Author author);

@Update

和@Select查询标签同理

@Update({"update db_user set name = #{name} where id = #{id}"})
int updateUserByPrimaryKey(User user);

@Delete

和@Select查询标签同理

@Delete({"delete from db_user where id = #{key}"})
int deleteUserByPrimaryKey(Long key);

@Param

首先明确这个注解是为SQL语句中参数赋值而服务的。
①方法有多个参数,需要 @Param 注解
②方法参数要取别名,需要 @Param 注解
③XML 中的 SQL 使用了 $ 会导致SQL注入,那么参数中也需要 @Param 注解
其中insert into user (username,address) values (#{username},#{address});中的userName和address都是从注解@Param()里面取的,取出来的值就是方法中参数 String name 和 String addr的值。

@Mapper
public interface UserMapper {Integer insert(@Param("username") String name, @Param("address") String addr);
}

对应的 XML 文件

<insert id="insert" parameterType="org.example.bean.User">insert into user (username,address) values (#{username},#{address});
</insert>

④在动态 SQL 中使用了参数作为变量,也需要 @Param 注解,在动态 SQL 中用到了参数作为判断条件,也要加 @Param 注解

@Mapper
public interface UserMapper {List<User> getUserById(@Param("id")Integer id);
}

对应的xml文件

<select id="getUserById" resultType="org.example.bean.User">select * from user<if test="id!=null">where id=#{id}</if>
</select>

结果集注解@Results、@Result、@resultMap

对于表的字段名和对象的属性名不同时,需要完成字段名和属性之间的映射关系。
有两种方式1、为列起别名,别名和属性名一致

    <select id="findOne" resultType="com.example.Student">select stu_id id,stu_name name,stu_age age from tb_stu where stu_id=#{id}</select>

2、使用resultMap完成列和属性之间的映射关系。

<resultMap id="StuMapper" type="com.example.Student"><!--column:列名 property:属性名--><id column="stu_id" property="id"/><!--普通列的映射关系--><result column="stu_name" property="name"/><result column="stu_age" property="age"/></resultMap><!--resultType和ResultMap选一个使用,这里的resultMap="StuMapper引用了上面定义好的--><select id="findOne" resultMap="StuMapper">select * from tb_stu where stu_id=#{id}</select>

注解方式完成列和属性之间映射
@Results()注解和@Result()共同配合使用,@Results 注解有id和value两个属性,其中id属性对应的是XML配置中resultMap标签的id属性,其它地方可以使用这个id来引用它,而value属性对应的是XML配置中resultMap标签下的<id>和<result>标签,<id>标签用id=true属性来确定。

    @Results( id = "exampleMap" ,value = {@Result(id = true ,property = "id",column = "uid"),@Result(property = "username",column = "uusername"),@Result(property = "password",column = "upassword")})@Select("select * from user")ArrayList<T_User> selectAll();

使用@ResultMap注解来引用一个已经存在的ResultMap

//引用结果集:@Select("select * from user")@ResultMap("exampleMap")ArrayList<T_User> selectAll1();

第三章、Spring框架常用注解

开启注解:

<context:component-scan base-package="com.guo"></context:component-scan>
<context:annotation-config/>

3.1)Spring Bean相关注解

@Configuration

声明当前类为配置类;此注解用在class上来定义bean。其作用和xml配置文件相同,表示此bean是一个Spring配置。此外,此类可以使用@Bean注解来初始化定义bean。它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。一般用来声明配置类,可以使用 @Component注解替代,不过使用Configuration注解声明配置类更加语义化。
使用@Configuration注解,你可以在Java类中进行配置,而不必依赖于XML配置文件。这使得配置更加灵活和类型安全。
支持组件扫描:@Configuration注解通常与@ComponentScan注解一起使用,以启用组件扫描并自动发现被@Configuration标记的类。

………………在spring启动时会执行@Configuration 类中 @Bean方法 ,如果您的项目中已经使用了 @Component、@Service、@Repository 等注解,并且这些注解的类位于Spring扫描范围内,那么通常情况下不需要额外的 @ComponentScan 注解。
定义Bean:在配置类中,你可以使用@Bean注解来声明一个Bean定义。这表示Spring容器将会实例化这些Bean,并根据配置进行依赖注入和管理。

@Configuartion
public class SpringCoreConfig {
@Bean
public AdminUser adminUser() {
AdminUser adminUser = new AdminUser();
return adminUser;
}}

@Component,@Controller,@Service,@Repository

@Component注解用于标注一个普通的组件类,通知Spring被此注解的类需被纳入到Spring Bean容器中并进行管理。
接下来三个与@Component注解一样,被此注解标注的类,会自动被Spring所管理:
@Controller,用于标注Spring MVC的控制器。
@Service,用于标注业务逻辑类。
@Repository,用于标注DAO层的数据持久化类。

@ComponentScan

@ComponentScan注解用于配置Spring需要扫描的被组件注解注释的类所在的包。可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。value属性是basePackages的别名。
@ComponentScan:
此注解一般和@Configuration注解一起使用,指定Spring扫描注解的package。如果没有指定包,那么默认会扫描此配置类所在的package。

@Autowired,@Inject,@Resource,@Qualifier,@Primary

@Autowired作用在变量、setter方法、构造函数上,显式地标记Spring将要解析和注入的依赖项
有个属性为required,可以配置为false;
@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,

@Inject:由JSR-330提供
@Inject用法和@Autowired一样。默认按照类型匹配的,@Inject和@Name一起使用。

@Resource:
@Resource默认按 byName自动注入。@Autowired按byType自动注入,@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

@Qualifier:
按名称自动装配,此注解是和@Autowired一起使用的。使用此注解可以让你对注入的过程有更多的控制。
@Qualifier可以被用在单个构造器或者方法的参数上。当上下文有几个相同类型的bean, 使用@Autowired则无法区分要绑定的bean,此时可以使用@Qualifier来指定名称

@Component
public class User {
@Autowired
@Qualifier("address1")
private Address address;
...
}

@Primary
让spring进行自动装配的时候,默认使用首选的bean,和@Qualifier一个效果。

@Scope

声明 Spring Bean 的作用域,使用方法:

@Bean
@Scope("singleton")
public Person personSingleton(){return new Person();
}

四种常见的 Spring Bean 的作用域:
singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
prototype : 每次请求都会创建一个新的 bean 实例。
request : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。
session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

@Bean

@Bean注解主要的作用是告知Spring,被此注解所标注的类将需要纳入到Bean管理工厂中。含义:注入类、一般用来注入系统类
注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式;

@Value

使用在字段、构造器参数和方法参数上。@Value可以指定属性取值的表达式,支持通过#{}使用SpringEL来取值,也支持使用${}来将属性来源中(Properties文件、本地环境变量、系统属性等)的值注入到bean的属性中。
注入普通字符
注入操作系统属性
注入表达式结果
注入其它bean属性
注入文件资源
注入网站资源
注入配置文件
@Value三种情况的用法。
${}是去找外部配置的参数,将值赋过来

@value(${"message1"})
String message1;

#{}是SpEL表达式,去寻找对应变量的内容
#{}直接写字符串就是将字符串的值注入进去

3.2)功能性注解

@EnableScheduling:

在配置类上使用,开启计划任务的支持
含义:启动任务调度
位置:标注类

@Scheduled

来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)

@EnableAspetJautoProxy:

            含义:启动自动代理工厂位置:标注类

@Lazy

此注解使用在Spring的组件类上。默认的,Spring中Bean的依赖一开始就被创建和配置。如果想要延迟初始化一个bean,那么可以在此类上使用Lazy注解,表示此bean只有在第一次被使用的时候才会被创建和初始化。此注解也可以使用在被@Configuration注解的类上,表示其中所有被@Bean注解的方法都会延迟初始化。

@EnableAspectAutoProxy:开启对AspectJ自动代理的支持;
@EnableAsync:开启异步方法的支持;
@EnableScheduling:开启计划任务的支持;
@EnableWebMvc:开启web MVC的配置支持;
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories:开启对SpringData JPA Repository的支持;
@EnableTransactionManagement:开启注解式事务的支持;
@EnableCaching:开启注解式的缓存支持;

@Import:

要导入到容器中的组件
含义:导入其他配置类位置:配置类

@Import({Color.class, MyImportSelector.class, MyImportBeanDefinitionRegistrar.class})
public class MainConfig2 {@Scope("prototype")@Bean("person")public Person person() {System.out.println("我是Person");return new Person("素小暖",25);}
}

@Profile

指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。

@Conditional

通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。

@Required

主要用在 setter 方法上,它表示该 setter 方法的属性必须要在配置时注入值。否则就会报 BeanInitializationException 异常。详情看这个大佬的文章:Spring之@Required注解

@CrossOrigin

            位置:Controller接口方法含义:跨域注解,浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域,可以简单理解,如果前端端口是localhost:8080,后端端口是localhost:9090,controller配置了@CrossOrigin (没有添加其他参数,默认如何端口都可以访问)可以实现跨越访问,也可以使用其他配置类实现跨域访问。作用: 在controller上添加@CrossOrigin注解用来开启跨域请求,让其他域的请求可以访问该controller,否则所有其他域的访问会全部被拒绝。

3.3)AOP相关注解

Spring支持AspectJ的注解式切面编程。
在java配置类中使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持

@Aspect 声明一个切面

@After 在方法执行之后执行(方法上)

@Before 在方法执行之前执行(方法上)

@Around 在方法执行之前与之后执行(方法上)

@PointCut 声明切点

第四章、SpringMvc常用注解

@EnableWebMvc

在配置类中开启Web MVC的配置支持。

4.1)常见的处理 HTTP 请求

@RequestMapping

@RequestMapping注解的主要用途是将Web请求与请求处理类中的方法进行映射。当此注解用在Class上时,就创造了一个基础url,其所有的方法上的@RequestMapping都是在此url之上的。
修饰类:一级路径 (/init), 修饰方法-:二级路径 (/user/init)
注解拥有以下的六个配置属性:
value:映射的请求URL或者其别名,代表请求路径
method:兼容HTTP的方法名@GetMapping、PostMapping。可以使用其method属性来限制请求匹配的http method
params:请求在必须要携带的参数设置,根据HTTP参数的存在、缺省或值对请求进行过滤
header:根据HTTP Header的存在、缺省或值对请求进行过滤
consume:设定在HTTP请求正文中允许使用的媒体类型
product:在HTTP响应体中允许使用的媒体类型
在使用@RequestMapping之前,请求处理类还需要使用@Controller或@RestController进行标记

@Controller@RequestMapping("/users")public class UserController {@RequestMapping(method = RequestMethod.GET)public String getUserList() {return "users";}}

@GetMapping,@PostMapping,@DeleteMapping

@PutMapping,@PatchMapping

@GetMapping注解用于处理HTTP GET请求,
@PostMapping注解用于处理HTTP POST请求,
@DeleteMapping注解用于处理HTTPDelete请求,
@PutMapping注解用于处理HTTP PUT请求,
@PatchMapping注解用于处理HTTP PATCH请求,
并将这些请求映射到具体的处理方法中。它们相当于是@RequestMapping(method=HttpMethod.GET)这样的快捷方式。

4.2)前后端传值

@PathVariable

使用@PathVariable将路径中的参数绑定到请求方法参数上。

@RequestMapping("/users/{uid}")public String execute(@PathVariable("uid") String uid){}

@RequestBody,@RequestHeader,

@RequestParam,@RequestPart

@RequestBody在处理请求方法的参数列表中使用,读取 Request 请求,将HTTP请求正文的JSON或XML串行化为Java对象。,它可以接收到数据之后自动将数据绑定到 Java 对象上去,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。此外,还可以通过@Valid注解对请求主体中的参数进行校验。

@RequestHeader此注解用在请求handler方法的参数上,用于将http请求头部的值绑定到参数上。

@RequestParam此注解用在请求handler方法的参数上,用于将http请求参数的值绑定到参数上。

@RequestPart此注解用在请求handler方法的参数上,用于将文件之类的multipart绑定到参数上。

@ResponseBody

@ResponseBody会自动将控制器中方法的返回值写入到HTTP响应中。特别的,@ResponseBody注解只能用在被@Controller注解标记的类中。如果在被@RestController标记的类中,则方法不需要使用@ResponseBody注解进行标注。

@ResponseStatus

@ResponseStatus注解可以标注请求处理方法。使用此注解,可以指定响应所需要的HTTP STATUS。特别地,我们可以使用HttpStauts类对该注解的value属性进行赋值。

@ExceptionHandler

1、@ExceptionHander注解用于标注在方法,当控制器中的方法抛出异常时,Spring会自动捕获异常,并将捕获的异常信息传递给被@ExceptionHandler标注的方法。在此方法可以声明对Exception的处理逻辑。
2、如果Controller下有多个@ExceptionHandler注解,那么上面的异常类型不能出现一样的,否则运行时抛异常。

@Controller
@RequestMapping("/testController")
public class TestController {@RequestMapping("/demo1")@ResponseBodypublic Object demo1(){//不需要try {} catch {}int i = 1 / 0;return new Date();}//TestController 内的任何异常都会被兜住@ExceptionHandler({RuntimeException.class})public ModelAndView fix(Exception ex){System.out.println("do This");return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));}
}

@ControllerAdvice
此注解用于class上。前面说过可以对每一个controller声明一个ExceptionMethod。这里可以使用@ControllerAdvice来声明一个类来统一对所有@RequestMapping方法来做@ExceptionHandler、@InitBinder以及@ModelAttribute处理。

@ModelAttribute

(1)@ModelAttribute注释方法
如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等。
(2)@ModelAttribute注释一个方法的参数
当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。

@SessionAttributes

此注解用于type级别,用于将JavaBean对象存储到session中。一般和@ModelAttribute注解一起使用。如下:

@ModelAttribute("user")public PUser getUser() {}// controller和上面的代码在同一controller中@Controller@SeesionAttributes(value = "user", types = {User.class})public class UserController {}

@Transactional

@Transactional 注解放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息。EmployeeService 的所有方法都支持事务并且是只读。当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,换言之,方法级别的事务属性信息会覆盖类级别的相关配置信息。需要注意的是此注解并不激活事务行为,它仅仅是一个元数据,会被一些运行时基础设施来消费。

@Scheduled

此注解使用在方法上,声明此方法被定时调度。使用了此注解的方法返回类型需要是Void,并且不能接受任何参数。
第二个与第一个不同之处在于其不会等待上一次的任务执行结束。

@Scheduled(fixedDelay=1000)public void schedule() {}@Scheduled(fixedRate=1000)public void schedulg() {}

@Async

此注解使用在方法上,声明此方法会在一个单独的线程中执行。不同于Scheduled注解,此注解可以接受参数。

使用此注解的方法的返回类型可以是Void也可是返回值。但是返回值的类型必须是一个Future。

第五章、SpringBoot常用注解

@SpringBootApplication

这个注解是springboot启动类上的一个注解,是一个组合注解,它的主要作用就是标记说明这个类是springboot的主配置类,springboot可以运行这个类里面的main()方法来启动程序此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合。

@EnableAutoConfiguration

@EnableAutoConfiguration注解此注解通常被用在主应用class上,用于通知Spring,根据当前类路径下引入的依赖包,自动配置与这些依赖包相关的配置项。

@RestController

相当于是@Controller和@ResponseBody的组合注解。返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

@RestControllerAdvice

此注解用于class上,同时引入了@ControllerAdvice和@ResponseBody两个注解。

@ConfigurationProperties

通过@ConfigurationProperties读取配置信息并与 bean 绑定

第六章、json常用注解

@JsonIgnoreProperties

此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
写法将此标签加在user类的类名上 ,可以多个属性也可以单个属性。

//生成json时将name和age属性过滤
@JsonIgnoreProperties({"name"},{"age"})
public class  user {private  String name;private int age;
}

@JsonIgnore

此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。

@JsonFormat

此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式,比如:

public class User{@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)private Date date;
}

@JsonSerialize

此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。

@JsonDeserialize

此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码

@JsonIgnoreType

标注在类上,当其他类有该类作为属性时,该属性将被忽略。

@JsonProperty

@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},
而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。

public class SomeEntity {@JsonProperty("user_name")private String userName;
}

致谢

参考了以下几篇文章:
Spring最常用的7种注解整理,让你在工作中事半功倍
Spring异常处理@ExceptionHandler
小学妹问:Mybatis常见注解有哪些?
接近8000字的Spring/Spring常用注解总结!安排!
Java开发者必须掌握的20个Spring常用注解
@param详解注解
哪吒:Spring常用注解(绝对经典)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/219901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习openAI 短长期AGI计划、使命、宪章、开创性研究、产品、工作待遇等

网站的设计&#xff1a;简洁而现代 主页 使命&#xff1a;Creating safe AGI that benefits all of humanity. &#xff08;比人类更聪明的人工智能系统&#xff09;&#xff08;自己实现或帮别人实现都认为是达成使命&#xff09;&#xff08;造福全人类&#xff1a;最大限…

36V/48V转12V 10A直流降压DC-DC芯片-AH1007

AH1007是一款36V/48V转12V 10A直流降压&#xff08;DC-DC&#xff09;芯片&#xff0c;它是一种高性能的降压变换器&#xff0c;常用于工业、汽车和电子设备等领域。 AH1007采用了先进的PWM调制技术和开关电源控制算法&#xff0c;能够高效地将输入电压从36V/48V降低到12V&…

MATLAB实现图像变换和滤波

MATLAB实现图像变换和滤波方法对具有不同特征的灰度图像进行处理 图像变换方法包括&#xff1a;DFT及IDFT&#xff0c;DCT及IDCT 图像滤波方法包括低通滤波和高通滤波 图像变换 DFT/IDFT 图像一般是二维的&#xff0c;根据二维离散傅里叶变换公式DFT&#xff0c;可以将图片…

如何使用Docker将.Net6项目部署到Linux服务器(一)

目录 配置服务器环境 配置yum 配置docker 安装.NetCore SDK6.0 发布Net6 添加Dockerfile。 发布文件。 编辑DockerFile文件 ​编辑 上传文件 安装MySql 配置服务器环境 配置yum 在配置yum之前&#xff0c;我们需要先了解yum是什么&#xff0c;yum&#xff0c;是Yellow…

力扣日记12.13-【二叉树篇】从中序与后序遍历序列构造二叉树

力扣日记&#xff1a;【二叉树篇】从中序与后序遍历序列构造二叉树 日期&#xff1a;2023.12.13 参考&#xff1a;代码随想录、力扣 106. 从中序与后序遍历序列构造二叉树 题目描述 难度&#xff1a;中等 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二…

基于vue实现的疫情数据可视化分析及预测系统-计算机毕业设计推荐 django

本疫情数据可视化分析及预测系统 开发&#xff0c;用小巧灵活的MySQL数据库做完后台存储解释。本系统不仅主要实现了注册登录&#xff0c;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;全国实时数据管理&#xff0c;每日实时数据管理&#xff0c;国内实时动态…

@Scheduled任务调度/定时任务-非分布式

1、功能概述 任务调度就是在规定的时间内执行的任务或者按照固定的频率执行的任务。是非常常见的功能之一。常见的有JDK原生的Timer, ScheduledThreadPoolExecutor以及springboot提供的Schduled。分布式调度框架如QuartZ、Elasticjob、XXL-JOB、SchedulerX、PowerJob等。 本文…

SpringBoot进行自然语言处理,利用Hanlp进行文本情感分析

. # &#x1f4d1;前言 本文主要是SpringBoot进行自然语言处理&#xff0c;利用Hanlp进行文本情感分析&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风…

医保电子凭证在项目中的集成应用

随着医保电子凭证使用普及&#xff0c;医疗行业的各个场景都要求支持医保码一码通办&#xff0c;在此分享一下&#xff0c;在C#和js中集成医保电子凭证的demo 供有需要的小伙伴参考。 一、项目效果图 在c#中集成医保电子凭证效果 在js中集成医保电子凭证效果 二、主要代码 c#…

EasyRecovery2024功能强大且专业的mac电脑数据恢复程序

EasyRecovery15是一款功能强大且专业的IOS数据恢复程序&#xff0c;专为在iPhone&#xff0c;iPad和iPod touch上检索丢失的照片&#xff0c;消息&#xff0c;音乐等而设计。无论您是错误删除还是意外丢失了对您来说重要的任何内容&#xff0c;EasyRecovery都会帮助您找回它们。…

群晖(Synology)新建存储池使用 Home 服务

每一个用户都可以有一个自己的 Home 服务。 这个在群晖存储新建存储池后可以自动启用这个服务。 启用后&#xff0c;可以看到你的文件系统中有一个 homes 的文件了。 群晖&#xff08;Synology&#xff09;新建存储池使用 Home 服务 - 系统容器 - iSharkFly每一个用户都可以有…

flutter调试器查看不了副页面(非主页面/子页面)

刚接触flutter&#xff0c;写了两个页面&#xff0c;通过按钮&#xff0c;可以从主页面跳转到副页面&#xff0c;副页面我自己写的一个独立的dart文件&#xff0c;在主页面的代码中导入使用。但是当我运行代码后&#xff0c;点击跳转的时候&#xff0c;却发现查看不到对应的副页…

nodejs微信小程序+python+PHP沧州地区空气质量数据分析系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

linux(centos7)离线安装mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar

1. 卸载mariadb相关rpm # 查找 rpm -qa|grep mariadb rpm -qa|grep mysql# 卸载 rpm -e --nodeps mariadb... rpm -e --nodeps mysql...2. 删除mysql相关文件 # 查找 find / -name mysql# 删除 rm -rf /var/lib/mysql...3. 查看是否有相关依赖&#xff0c;没有需安装 rpm -q…

Android Studio的代码笔记--Adapter+GridView学习

AdapterGridView学习 AdapterGridViewSimpleAdapterGridViewactivity_main.xmlappicon.xmlMainActivity 自定义BaseAdapterGridView已下载应用PackageInfoAppAdapterMainActivity2 其他获取已下载应用信息函数获取所有应用信息函数ImageView产生圆角的方法背景设置很渐变设置选…

Hadoop学习总结(Hive的安装)

Hive的安装模式分为3种&#xff0c;分别是嵌入模式、本地模式、远程模式。 &#xff08;1&#xff09;嵌入模式&#xff1a;使用内嵌的 Derby 数据库存储元数据&#xff0c;这种方式是 Hive 的默认安装方式&#xff0c;配置简单&#xff0c;但是一次只能连接一个客户端&#xf…

模块一——双指针:18.四数之和

文章目录 题目描述算法原理排序双指针 代码实现排序双指针复杂度分析时间复杂度&#xff1a;O(N^3^)空间复杂度&#xff1a;O(log⁡N)或者O(N) 题目描述 题目链接&#xff1a;18.四数之和 算法原理 排序双指针 依次固定⼀个数a &#xff1b;在这个数a 的后⾯区间上&#x…

C#实现支付宝转账功能

环境 .net 6 AlipaySDKNet.OpenAPI 2.4.0 申请证书 登录支付宝开放平台https://open.alipay.com/ 进入控制台 授权回调地址也设置一下&#xff0c;加密方式AES 新建.net 6空白的web项目 证书除了java都需要自己生成一下pkcs1的密钥 privatekey.txt就是根据应用私钥生成…

玩转大数据16:大数据存储与文件格式优化

随着大数据时代的到来&#xff0c;存储和处理海量数据成为了一个重要的挑战。在大数据存储中&#xff0c;选择合适的文件格式对数据的压缩率、读写性能和扩展性起着关键作用。本文将介绍大数据存储的挑战&#xff0c;探讨常见的文件格式&#xff0c;并深入讨论文件格式优化的策…

小新Air-14 Plus 2021款AMD ACN版(82L7)原装出厂Win11系统镜像

LENOVO联想笔记本开箱状态原厂Windows11系统包 链接&#xff1a;https://pan.baidu.com/s/1D_sYCJAtOeUu9RbTIXgI3A?pwd96af 提取码&#xff1a;96af 联想小新AIR14笔记本电脑原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 所需要工具&am…