Spring框架注解
2021-01-22 18:15:22 11 举报
AI智能生成
Spring框架注解
作者其他创作
大纲/内容
数据访问注解
@Transactional
用于接口、接口中的方法、类、类中的公有方法
光靠该注解并不足以实现事务
仅是一个元数据,运行时架构会使用它配置具有事务行为的Bean
光靠该注解并不足以实现事务
仅是一个元数据,运行时架构会使用它配置具有事务行为的Bean
该注解还支持以下特性:
传播类型
隔离级别
操作超时
只读标记
JPA注解
@Entity
表明这是一个实体类。一般和@Table配合使用。
如果表名和实体类名相同的话,@Table可以省略
如果表名和实体类名相同的话,@Table可以省略
@Table
映射数据库中的表
@Column
映射表中的列
@Id
表示该属性为主键
@GeneratedValue
指定主键生成器的名字和生成策略
@SequenceGeneretor
自动为实体的数字标识字段/属性分配值
@MappedSuperClass
用在确定是父类的Entity上。父类的属性可被子类继承
@NoRepositoryBean
在充当父类的Repository上注解,以告诉Spring不要实例化该Repository
@Transient
表示该属性并非是一个到数据库表字段的映射,ORM框架应忽略它。
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。
@Basic(fetch=FetchType.LAZY)
指定实体属性的加载方式
@JsonIgnore
标记在属性上,指示当进行序列化或反序列化时,忽略该属性
@JoinColumn
一对一:本表中指向另一个表的外键。
一对多:另一个表指向本表的外键
一对多:另一个表指向本表的外键
@OneToOne
一对一
@OneToMany
一对多
@ManyToOne
多对一
SpringMVC和
REST注解
REST注解
@Controller
用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),
一般这个注解在类中,通常方法需要配合注解@RequestMapping
一般这个注解在类中,通常方法需要配合注解@RequestMapping
@RestController
@RestController = @Controller+@ResponceBody
表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中
是REST风格的控制器
表示这是个控制器bean,并且是将函数的返回值直接填入HTTP响应体中
是REST风格的控制器
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
@RequestMapping变体
@GetMapping
等于@RequestMapping(method = RequestMethod.GET)
for select
for select
@PostMapping
等于@RequestMapping(method = RequestMethod.POST)
for create new object
for create new object
@PutMapping
等于@RequestMapping(method = RequestMethod.PUT)
for update operation
for update operation
@PatchMapping
等于@RequestMapping(method = RequestMethod.PATCH)
partial update operation
partial update operation
@DeleteMapping
等于@RequestMapping(method = RequestMethod.DELETE)
for delete operation
for delete operation
@CookieValue
用于方法参数上获得cookie
@CrossOrigin
用于类和方法上,以实现跨域请求。
有时,运行JavaScript的主机和服务数据的主机不是同一个,此时就涉及到跨域(CORS)
有时,运行JavaScript的主机和服务数据的主机不是同一个,此时就涉及到跨域(CORS)
@ExceptionHandler
用来定义异常处理类
@InitBinder
初始化绑定器,用于数据绑定、设置数据转换器等
@Mappings
@Mapping
@Mapping
用于字段上。
Mapping是一个Meta注解,以指示web映射注解
Mappings可用于多个
Mapping是一个Meta注解,以指示web映射注解
Mappings可用于多个
@MatrixVariable
矩阵变量
@RequestAttribute
帮助我们访问早先预存的全局请求属性(控制器之外)
@RequestBody
指示方法参数应该绑定到Http请求Body
HttpMessageConveter负责将HTTP请求消息转为对象
HttpMessageConveter负责将HTTP请求消息转为对象
@RequestHeader
映射控制器参数到请求头的值
@RequestParam
抽取查询参数,表单参数,甚至表单中的文件
@ResponseBody
指示方法返回值应该直接写入Response Body(不再走视图处理器)
Spring使用HttpMessageConverter实现了返回对象转为响应体
Spring使用HttpMessageConverter实现了返回对象转为响应体
@ResponseStatus
用于方法和异常类上。以一个状态码作为指示,且原因必须返回。
也可注解于Controller,其所有的@RequestMapping方法都会继承它
@SessionAttribute
绑定方法参数到会话属性
经常用于取回会话中的属性,然后全局管理
经常用于取回会话中的属性,然后全局管理
@SessionAttributes
用于将会话属性用Bean封装
@JsonBackReference
解决嵌套外链问题
@RepositoryRestResourcepublic
配合spring-boot-starter-data-rest使用
@PathVariable
路径变量
获取路径上传过来的参数
获取路径上传过来的参数
@ModelAttribute
把值绑定到Model中,使全局@RequestMapping可以获取到该值
@Valid
验证器,一般配合@InitBinder使用
全局异常处理
@ControllerAdvice
包含@Component。可被扫描到
全局处理异常器
一般与@ExceptionHandler一起使用
全局处理异常器
一般与@ExceptionHandler一起使用
@RestControllerAdvice
@RestControllerAdvice = @ControllerAdvice +@ResponceBody
核心注解
@Required
用于Bean的Setter方法上,以指示该Bean组装时必须要有该属性,否则抛出BeanInitializationException
@Autowired
用于field,method,constructor。
当在字段上使用并使用属性名称传递字段的值时,自动为字段分配传递的值。
当在setter方法上使用时,尝试在该方法上执行by Type自动装配。
在构造函数上使用时,构造函数注入发生在对象创建时。
当加上(required=false)时,就算找不到bean也不报错。
JSR规范中也有相对应的注解:JSR250的@Resource,JSR330的@Inject
当在字段上使用并使用属性名称传递字段的值时,自动为字段分配传递的值。
当在setter方法上使用时,尝试在该方法上执行by Type自动装配。
在构造函数上使用时,构造函数注入发生在对象创建时。
当加上(required=false)时,就算找不到bean也不报错。
JSR规范中也有相对应的注解:JSR250的@Resource,JSR330的@Inject
@Qualifier
only field level
通常和@Autowired一起使用。
当对同一字段创建多个bean时,@Qualifier可帮你做更详细配置。
通常和@Autowired一起使用。
当对同一字段创建多个bean时,@Qualifier可帮你做更详细配置。
@Primary
基本可以和@Qualifier等同。
但有时,我们会用到一个常用的Bean,而其它的很少用到时,就用它来指示最常用的那个Bean
这样,当Spring会选择优先创建该Bean
但有时,我们会用到一个常用的Bean,而其它的很少用到时,就用它来指示最常用的那个Bean
这样,当Spring会选择优先创建该Bean
@Scope
用来定义Bean或组件的范围
可选项为
singleton 单例,全局1个,默认值
prototype 原型
request
session
globalSession
a custom scope
建议不要直接写字符串,用value = ConfigurableBeanFactory.SCOPE_SINGLETON更合适,不易出错
可选项为
singleton 单例,全局1个,默认值
prototype 原型
request
session
globalSession
a custom scope
建议不要直接写字符串,用value = ConfigurableBeanFactory.SCOPE_SINGLETON更合适,不易出错
@Configuration
class level
当在类上声明它时,意味着该类提供了1个或多个bean方法,该方法由Spring容器在运行时处理
当在类上声明它时,意味着该类提供了1个或多个bean方法,该方法由Spring容器在运行时处理
@ComponentScan
level main class only
与@Configuration注解一起,发现和装配Bean。
可通过basePackageClasses 或basePackage指定扫描的基类或基包。
如果声明的包未定义的话,会从声明该注解的类所在的包及子包开始扫描
与@Configuration注解一起,发现和装配Bean。
可通过basePackageClasses 或basePackage指定扫描的基类或基包。
如果声明的包未定义的话,会从声明该注解的类所在的包及子包开始扫描
@Bean
method level
等价于XML中配置的bean
产生一个Bean,并交给Spring容器管理。
等价于XML中配置的bean
产生一个Bean,并交给Spring容器管理。
@PreDestroy 和@PostConstruct
指示Bean的初始化方法和销毁方法
@Lazy
表示延迟实例化一个Bean。
默认情况下,Spring容器启动时,会在应用上下文中实例化所有Bean的单例对象。
有些情况下,我们需要在请求一个Bean的时候才创建,这时就可以用这个注解了。
这个注解可以放在以下注解之上:
@Bean ,可实现Bean工厂的延时调用
@Configuration 会影响容器中所有的@Bean方法
@Component/@Service 延迟创建组件或服务
@Autowired 延迟加载依赖
默认情况下,Spring容器启动时,会在应用上下文中实例化所有Bean的单例对象。
有些情况下,我们需要在请求一个Bean的时候才创建,这时就可以用这个注解了。
这个注解可以放在以下注解之上:
@Bean ,可实现Bean工厂的延时调用
@Configuration 会影响容器中所有的@Bean方法
@Component/@Service 延迟创建组件或服务
@Autowired 延迟加载依赖
@Value
可用于字段,构造器参数,方法参数,以指示一个默认的值。
支持#{...}和${...}这两种占位符。
注入Spring boot application.properties配置的属性的值
支持#{...}和${...}这两种占位符。
注入Spring boot application.properties配置的属性的值
@Import
用来导入其他配置类
@ImportResource
加载xml配置文件
@PropertySource
加载属性资源文件
原型注解
@Component
class level
可配合CommandLineRunner使用,在程序启动后执行一些基础任务;
当组件不好归类的时候,可以使用这个注解进行标注
可配合CommandLineRunner使用,在程序启动后执行一些基础任务;
当组件不好归类的时候,可以使用这个注解进行标注
@Controller
用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),
一般这个注解在类中,通常方法需要配合注解@RequestMapping
一般这个注解在类中,通常方法需要配合注解@RequestMapping
@Service
一般用于修饰service层的组件
@Repository
声明该类是一个Repository
SpringBoot注解
@EnableAutoConfiguration
level main class only
自动配置。尝试根据你添加的jar依赖自动配置你的Spring应用。
例如,如果classpath下存在HSQLDB,并且你没有手动配置任何的数据库连接beans,Spring将会自动配置一个内存型(in-memory)数据库”。
你可以将@EnableAutoConfiguration或@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
如果发现应用了你不想要的特定自动配置类,可使用@EnableAutoConfiguration注解的排除属性来禁用它们
自动配置。尝试根据你添加的jar依赖自动配置你的Spring应用。
例如,如果classpath下存在HSQLDB,并且你没有手动配置任何的数据库连接beans,Spring将会自动配置一个内存型(in-memory)数据库”。
你可以将@EnableAutoConfiguration或@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。
如果发现应用了你不想要的特定自动配置类,可使用@EnableAutoConfiguration注解的排除属性来禁用它们
@SpringBootApplication
@SpringBootApplication =
@EnableAutoConfiguration (使能自动配置)
+@ComponentScan( 扫描组件 )
+@Configuration (使用基于Java的配置)
@EnableAutoConfiguration (使能自动配置)
+@ComponentScan( 扫描组件 )
+@Configuration (使用基于Java的配置)
SpringCloud注解
@EnableConfigServer
配置服务器
@EnableEurekaServer
注册服务器
@EnableDiscoveryClient
发现客户端
@EnableCircuitBreaker
熔断器
@HystrixCommand
服务降级
缓存注解
@Cacheable
方法级
@CachePut
方法级,更新缓存
@CacheEvict
方法级,清除缓存
@CacheConfig
在类级别配置缓存,以避免多次声明
任务执行和调度注解
@Scheduled
方法级,具有该注解的方法应无返回值,且不接受任何参数
@Async
方法级,每个方法均都在单独的线程中,可接受参数;可返回值,也可不返回值。
测试注解
@BootstrapWith
类级别,配置Spring测试上下文框架的启动
@ContextConfiguration
类级别,指定配置文件
@WebAppConfiguration
类级别,指示ApplicationContext加载的集成测试环境应为WebApplicationContext
@Timed
指定测试方法的执行时间,超时失败
@Repeat
运行次数
@Commit
类级和方法级,指示事务的提交
@RollBack
类级和方法级,指示事务的回滚
@DirtiesContext
类级和方法级,指示ApplicationContext已修改,触发重加载以进行后续的测试
支持3种关闭上下文的方式
BEFORE_METHOD
BEFORE_CLASS
BEFORE_EACH_TEST_METHOD
@BeforeTransaction
测试类的void方法上,指示具有该注解的方法应该在所有@Transactional注解的方法之前执行
@AfterTransaction
测试类的void方法上,指示具有该注解的方法应该在所有@Transactional注解的方法之后执行
@Sql
类级和方法级,运行Sql脚本
方法上的@Sql会覆盖类级别的@Sql
方法上的@Sql会覆盖类级别的@Sql
@SqlConfig
同@Sql一起工作,定义了如何解析和执行SQL脚本的元数据
用于类级时对该类下的所有脚本起作用
用于类级时对该类下的所有脚本起作用
@SqlGroup
方法级,包含多个@Sql
@SpringBootTest
用于启动集成测试上下文
@DataJpaTest
用于替代@SpringBootTest进行测试JPA Repositories,
测试时使用H2等内存数据库
测试时使用H2等内存数据库
@DataMongoTest
提供最小化的自动配置和一个内置的MongoDB以进行集成测试
@WebMVCTest
主要用于controller层测试,只覆盖应用程序的controller层,
HTTP请求和响应是Mock出来的,因此不会创建真正的连接。因此需要用@MockBean注解创建所需的Bean进行模拟接口调用。
如果Controller层对Service层中的其他bean有依赖关系,那么需要使用Mock提供所需的依赖项。
WebMvcTest要快得多,因为我们只加载了应用程序的一小部分。
HTTP请求和响应是Mock出来的,因此不会创建真正的连接。因此需要用@MockBean注解创建所需的Bean进行模拟接口调用。
如果Controller层对Service层中的其他bean有依赖关系,那么需要使用Mock提供所需的依赖项。
WebMvcTest要快得多,因为我们只加载了应用程序的一小部分。
@AutoConfigureMockMVC
类似于@WebMVCTest,只不过启动的是整个SpringBoot上下文
@MockBean
创建和注入一个Mockito Mock
@JsonTest
限制SpringBoot的自动化配置,以处理JSON
该注解会自动化配置出一个JacksonTester 或 GsonTester实例
@TestPropertySource
类级别,指派测试类的属性源
0 条评论
下一页