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常用注解(绝对经典)
相关文章:
Java常用注解
文章目录 第一章、Java注解与元数据1.1)元数据与注解概念介绍1.2)Java注解的作用和使用1.3)注解的分类 第二章、Mybatis框架常用注解2.1)Mybatis注解概览2.2)常用注解MapperScanMapperSelectInsertUpdateDeleteParam结…...
golang实现同步阻塞、同步非阻塞、异步非阻塞IO模型
一、同步阻塞IO模型TCP和HTTP示例 同步阻塞IO符合我们的直觉认知,应用程序从TCP连接接收数据缓冲区接受数据,如果没有数据就等待——此处就是阻塞,如果有数据需要把数据从内核空间读取到用户空间——此处就是同步。 在Go语言中进行同步阻塞IO编程TCP交互,可以使用标准库中…...
java SSM教师工作量管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计
一、源码特点 java SSM 教师工作量管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要…...
大数据技术之Hive(超级详细)
第1章 Hive入门 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计。 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。 本质是:将HQL转化成MapReduce程序 …...
NVMe over Fabrics with SPDK with iRDMA总结 - 1
1.0 Introduction简介 NVM Express* (NVMe*) drives are high-speed, low-latency, solid-state drives (SSDs), that connect over the server Peripheral Component Interconnect Express* (PCIe*) bus. NVM Express* (NVMe*) 硬盘是高速、低延迟的固态硬盘 (SSD),通过服…...
【PTA刷题】求链式线性表的倒数第K项(代码+详解)
文章目录 题目代码详解 题目 给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。 输入格式: 输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内&#…...
VSCode 创建工作区,多文件夹终端切换
VSCode 创建工作区的好处有以下几点: 项目结构清晰:每个工作区都有自己的文件夹结构,可以更好地组织和管理项目文件。版本控制:VSCode 支持多种版本控制系统,如Git,可以在工作区内进行代码的版本管理。插件…...
高阶函数(js的问题)
(1)函数可以作为参数被传递 (2)函数可以作为返回值输出 4-1.函数作为参数传递 Array.prototype.sort方法: var array [10,5,12,3];array.sort();//array:[10,12,3,5]//如代码那样,排序的结果并不是我们想要…...
android-android源码目录
android源码目录 Android.bp art bionic bootable bootstrap.bash build build.sh compatibility cts dalvik developers development device external frameworks: Android 系统的核心框架代码av: 该目录包含与音视频相关的框架和库,如音频解码器、视频编码器、多…...
Json格式化
Json格式化 大家好,我是微赚淘客机器人的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Json格式化:让数据更亮眼,解密Json的奇妙世界 在现代Web开发中,Json(JavaScript Object N…...
数据可视化设计:让数据故事更有说服力
写在开头 在数字化的时代,数据如同一把锁住的宝剑,等待我们挥舞。然而,唯有通过巧妙运用数据可视化的原则和技术,我们才能真正解锁数据的力量,创造出令人信服的数据故事。本文将深入研究数据可视化设计的奥秘,揭示其中的魔法,让你在数据的海洋中游刃有余,用数据的语言…...
java面试题-Spring事务以及@Transactional注解详解
远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 对于这个面试中高频问到…...
ARM流水灯
.text .global _start _start: LED1 1.RCC时钟使能GPIOE RCC_MP_AHB4ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) STR R1,[R0] 2.设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BIC R1,R1,#(0x3<&…...
docker-compose单机容器编排
Dockerfile:先配置好文件,然后build,镜像-------->容器。 docker-conpose 既可以基于dockerfile,也可以基于镜像,一键式拉起镜像和容器。 docker-compose核心就是yml文件,可以定义容器的一切。通过yml配置,直接运行…...
matlab信号分选系统算法-完整算法结构
matlab信号分选系统算法 针对得到的脉冲流PDW进行信号分选,包括重频恒定、重频抖动、重频参差和重频滑变四种脉间调制类型。 这里我们先进行数据的仿真,后续边仿真边分享思路:首先根据信号类型,分别产生重频恒定、重频抖动、重…...
十八)Stable Diffusion使用教程:艺术二维码案例
今天说说怎么样使用SD生成艺术二维码。 我们直接上图。 方式有三种,分别如下: 1)方式一:直接 contronet 的tile模型进行控制 使用QRBTF Classic生成你的二维码。 首先输入网址,选择喜欢的二维码样式(推荐第一种就行): 然后选择相应参数,这里推荐最大的容错率,定…...
【LeetCode每日一题】53. 最大子数组和
https://leetcode.cn/problems/maximum-subarray/description/ 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 方式一:暴力…...
机器学习笔记 什么是协方差矩阵?
一、协方差矩阵 协方差矩阵是一种矩阵,用于表示随机向量中给定的元素对之间的协方差值。协方差矩阵也可以称为色散矩阵或方差-协方差矩阵。这是因为每个元素的方差是沿着矩阵的主对角线表示的。 协方差矩阵始终是方阵。此外,它是半正定且对称的。该矩阵在随机建模和主成分分析…...
使用Python监控服务器在线状态
前言 在公司内网有一台服务器,有动态的公网IP,使用DDNS对外提供服务,但是会因为停电、服务器卡死等原因导致服务器离线。服务器离线后无法及时获知,因此需要实现在服务器离线的时候能够发送消息到手机上。 思路梳理 公司办理的…...
【JAVA】黑马MybatisPlus 学习笔记【二】【核心功能】
2.核心功能 刚才的案例中都是以id为条件的简单CRUD,一些复杂条件的SQL语句就要用到一些更高级的功能了。 2.1.条件构造器 除了新增以外,修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外&…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...
使用homeassistant 插件将tasmota 接入到米家
我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...
多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...
本地部署drawDB结合内网穿透技术实现数据库远程管控方案
文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下,数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统,还是初创…...
