springboot注释详解版本2

@AutoConfigurationPackage

自动配置包

@Autowired

使用场景:属性 setter 构造 构造参数

作用:装配注入bean

装配方式:默认:bytype

required:true 设置为false时 不检查bean是否存在 否则必须存在

@Aspcet

把当前类标识为一个切面,供容器读取

@Before("bean(userServiceImpl)")

执行之前切入

@After("bean(userServiceImpl)")

执行之后切入 不管是否异常

@AfterReturning

运行中切入 运行正常状态

vaue:"bean(userServiceImpl)"

returning : "result"

声明切入点返回值变量名 可以在标注方法上声明同名参数调用返回值

@AfterThrowing

运行中异常时 可以看到异常不能处理

value :"bean(userServiceImpl)"

throwing:"e" 捕获异常变量名称 可以在标注方法上声明同名参数调用异常

@Around("bean(userServiceImpl)")

环绕通知

@Pointcut("bean(userServiceImpl) || bean(awardServiceImpl)")

统一切入点管理 配置后以上引入可以改为统一管理标注测方法名()

execution(注解【可选】 返回值类型 引用地址.方法名(参数列表))

*匹配一次 返回值类型 包 类 方法名 参数

.. 匹配0或多次

@AliasFor

@ContextConfiguration

分片测试

locations:{"classpath:***.xml".""}/***.class

@Conditional({***.class})

根据满足不同的条件后添加组件配置内容生效

@ConditionalOnWebApplication

判断当前应用是web应用配置生效

@ConditionalOnJndi

JNDI存在指定项

@ConditionalOnNotWebApplication

当前不是web环境

@ConditionalOnClass(***.class)

判断当前系统环境有没有这个类 例如:CharacterEncodingFilter.class(springMVC乱码过滤器)

@ConditionalOnMissingClass

如果系统环境没有这个类

@ConditionalOnResource

类路径下是否存在指定资源文件

@ConditionalOnProperty

prefix : "spring.http.encoding"

value : "enabled"

matchIfMissing : true 不配置也生效

判断配置文件中是否存在某个配置

@ConditionalOnMissingBean(***.class)

如果容器中没有配置该组件再去配置此组件

@ConditionalOnBean(***.class)

如果容器汇总有该组件去配置组件

@ConditionalOnExpression

满足SpEL表达式指定

@Configuration

org.springframework.context.annotation.Configuration

标识当前类为自动配置类 需要将启动就加载的自动配置类放在META-INF/spring.factories中

@ConfigurationProperties(prefix = "person")

将本类中所有属性从全局配置文件中相关属性进行绑定

支持松散绑定语法

支持JSR303数据校验

@EnableConfigurationProperties(***.class)

允许启动指定类的ConfigurationProperties功能生效 并添加至IOC容器

@Controller

该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标识为Spring中的Bean,其功能与@Component相同

@RestController

等效于类标注 @Controller加每个方法标注@RespanseBody

@ResponseBody

声明为响应体

可以写在单个方法或者控制器类上声明类中所有方法为相应体

返回JSON格式数据

@ResponseStatus

设置http响应状态码

@RequestBody

声明为请求体参数 标注在请求参数实体

@RequestMapping

声明为请求容器 返回前端界面

value:设置请求路由 /emp/{id}

method:设置请求接受方式 RequestMethod.POST

@PostMapping

声明为post方式请求容器

@GetMapping

@PutMapping

@DeleteMapping

@Component

org.springframework.stereotype.Component

将当前类对应的对象创建和管理权力交予spring

value:可以自定义beanname 获取时首字母小写

@ComponentScan

org.springframework.context.annotation.ComponentScan

进行组件对象的扫描 spring框架会扫描当前类所在的包,检查此包下组件并创建组件对象

@Bean("bean_name")

将方法的返回值分配到容器中 组件名默认为注明方法的名称

name:设置别名 默认为标注的方法名

value:设置名称的别名 用于不需要其他属性时

initMethod:声明bean初始化时需要执行的方法 等于@PostConstruct

destroyMethod:声明bean销毁时需要执行的方法 等于@PreDestroy

@Data

注在类上,提供类的get、set、equals、hashCode、toString等方法

@AllArgsConstructor

注在类上,提供类的全参构造

@NoArgsConstructor

注在类上,提供类的无参构造

@Setter

注在属性上,提供 set 方法

@Getter

注在属性上,提供 get 方法

@ToString

注在类上,提供tostring方法

@EqualsAndHashCode

注在类上,提供对应的 equals 和 hashCode 方法

@Log4j/@Slf4j

注在类上,提供对应的 Logger 对象,变量名为 log

trace:跟踪信息

debug:调试信息

info:一般信息

warn:警告信息

error:错误信息

@Accessors

可以用于生成链式调用(Fluent API)的方法

chain:true

@Document

标注在注入elasticsearch的bean类上

indexName 索引名称

type 索引类型

@JestId

标注jest使用方式使用elasticsearch时 bean类的id

@Field

标注为非主键属性

analyzer:

searchAnalyzer:

format:

pattern:

@Highlight

fields:

parameters:

@HighlightField

name:

@HighlightParameters

preTags:

postTags:

@EnableWebMvc

全面接管springMVC 所有spring mvc自动配置失效

@EnableAutoConfiguration

开启自动配置功能

exclude:排除加载 不自动加载此项 示例:DataSourceAutoConfiguration.class

@ExtendWith(*.class)

@EnableGlobalMethodSecurity

开启方法授权检测

prePostEnabled = true

@AuthenticationPrincipal

使用场景:方法属性

@PreAuthorize("hasAnyAuthority('ADMIN')")

当前登录用户需要admin权限才能删除 否侧抛出异常

使用场景 :方法

@SpringBootConfiguration

标注为spring boot配置类

@AutoConfigureMockMvc

@MockBean

Spring提供 创建模拟对象/组件

@EnableEurekaServer

开启分布式注册中心

@EnableDiscoveryClient

开启服务发现功能

@LoadBalanced

使用负载均衡机制 标注在template方法上

@EnableWebSecurity

开启安全验证注解功能 标注在安全实现类中继承 WebSecurityConfigurerAdapter并实现相关业务

@EnableScheduling

允许开启定时任务注解功能

@Scheduled

cron 秒 分 时 日 月 周 示例:0 * * * * MON-SAT

@EnableAsync

允许开启异步注解功能

@Async

声明这是一个spring异步方法 spring会将其放入线程池

@EnableRabbit

开启基于注解的rabbitmq

@RabbitListener()

开启消息队列的监听 如果消息队列有新消息读取

queues = {"atguigu.news"} 读取队列的名称 数组或值的形式

@EnableCaching

开启缓存 默认生效缓存SimpleCacheConfiguration

@Cacheable(cacheNames = {"emp"},key = "#root.args[0]")

方法执行前先查询缓存 使用cacheManager【ConcurrentMapCacheManager】根据名字得到Cache【ConcurrentMapCache】组件 根据KeyGenerator【SimpleKeyGenerator】生成的key查询缓存 如果有缓存数据走缓存 如果没有缓存数据运行方法将方法的运行结果缓存

cacheNames/value:指定缓存组的名字

key:缓存键 默认方法参数的值 [#id/#a0/#p0/#root.args[0]/]

#root.methodName 当前被调用的方法名

#root.method.name 当前被调用的方法

#root.target 当前被调用的目标对象

#root.targetClass 当前被调用的目标对象类

#root.args[0] 当前被调用的方法参数列表

#root.caches[0].name 当前方法调用使用的缓存列表

keyGenerator:key生成器 可配置 key/keyGenerator二选一

SimpleKeyGenerator默认生成策略 没有参数使用SimpleKey空参构造 如果存在参数使用第一个参数 多个参数使用Simpkey有参构造对象

cacheManager:指定缓存管理器

cacheResolver:

condition:指定符合条件下才生效

unless:否定缓存 指定条件为true不缓存 #result代表方法返回值

sync:是否启用异步缓存 异步模式不支持unless

@CachePut

调用方法更新缓存数据 ps:相同的键名会直接更新到缓存中

@CacheEvict()

删除指定键名的缓存

value

keyGenerator

allEntries:默认false 是否删除全部缓存

beforeInvocation:默认false 是否在方法执行前清空缓存

@Caching()

指定多个复杂缓存规则组合

cacheable = {@Cacheable(value = "emp")}

put = {@CachePut(),@CachePut()}

@CacheConfig()

标注在类 配置公共通用属性

cacheNames:等同于value 键名

@Qualifier("CacheManager_Beanname")

明确指定使用某个缓存管理器 用于区分多个缓存管理器 值为缓存管理器的bean名称

@Primary

将当前缓存管理器设置为默认

@Entity

使用JPA注解配置映射关系 告诉JPA这是一个实体类(和数据表映射的类)

如果省略指定表名注释默认使用类名小写

@Id

标明为当前操作表的主键名称

@GeneratedValue

strategy : GenerationType.IDENTITY

声明主键生成策略为自增主键

@Column

name : "last_name"

length : 50

声明为数据表对应的一个列 省略指定名称默认列名使用声明的属性名

@Table

name : "tbl_use"

指定映射的表名 如果不存在自动创建

@TableName

指定表名

@TableId

设置表的ID主键

type : IdType.AUTO 自动递增

@TableField

fill : FieldFill.INSERT FieldFill.INSERT_UPDATE

@Sql

scripts:"classpath:/***.sql" or {"classpath:/***.sql","classpath:/***.sql"}

executionPhase : Sql.ExecutionPhase.AFTER_TEST_METHOD 测试方法执行之后再导入文件

导入并执行sql文件

@Transactional

事务 保证数据一致性 在测试结束会回滚数据

*业务简单使用显示事务声明 复杂业务使用编程式事务处理

A: 原子性: 一组操作作为一个不可再分的单元

C: 一致性: 数据结果处理后, 总数不变, 前后一致

I: 隔离性: 事务之间彼此独立隔离, 互不影响

D: 持久性: 事务处理完成以后,数据永久保存, 持久存在

timeout: 指定超时时间,单位s 默认值-1,表示永不超时

rollbackFor:

rollbackForClassName:

noRollbackFor:指定异常不会回滚

niRollbackForClassName:

propagation: 2个业务方法(至少有一个开启事务管理)之间存在调用现象,此时就会涉及到事务传播

Propagation.REQUIRED 默认的 当前无事务则创建新建事务,当前有事务则延用当前事务

Propagation.requires_new: 当前无事务,创建新事务;当前有事务,暂停当前事务,创建新事务

Propagation.mandatory: 强制的 当前存在事务,使用当前事务,当前无事务,抛出异常

Propagation.never 始终在无事务情况下执行 当前无事务继续在无事务状态下执行 若当前有事务抛出异常

Propagation.not_supported:

不使用事务,当前无事务继续在无事务状态下执行,若当前有事务则暂停当前事务在无事务状态下执行

Propagation.supports:支持,当前无事务,继续无事务 ;当前存在事务,使用当前事务

Propagation.nested:嵌套的,当前无事务,创建新事务,当前存在事务,创建新的内嵌事务

*事务传播一定有代理对象调用, 类内部之间的方法没有事务传播

isolation:事务隔离级别

Isolation.READ_UNCOMMITTED

读未提交, 不可以避免脏读, 幻读, 可重复读, 并发性好

Isolation.READ_COMMITTED

读已提交, 建议使用, 可以避免脏读,不可以避免幻读, 不能避免重复读, 并发性能好

Isolation.REPEATABLE_READ

可以重复读, 可以避免脏读, 可以避免可重复读,不可避免幻读, 一定并发性能

Isolation.SERIALIZABLE

序列化, 完全隔离, 不能并发, 性能不好

常用:READ_COMMITTED, MySQL默认: REPEATABLE_READ

@Import({Registrar.class})

导入一个容器到组件

Registrar.class:将主程序所在包及其子包下的组件扫描到spring容器

EnableAutoConfigurationImportSelector.class:自动导入组件选择器

->AutoConfigurationImportSelector

->selectImports():决定导入spring容器到底导入那些组件 返回全类名形式

->getCandidateConfigurations():SpringFactoriesLoader.loadFactoryNames()从配置文件spring.factories中获取配置放置到容器

@ImportResource

locations : {"classpath:beans.xml"}

导入spring配置文件,让配置文件内容生效

@JsonFormat

pattern:时间格式匹配规则 参照时间函数 yyyy/MM/dd HH:mm:ss

timezone:设置时区 参考:GMT+8 ZoneInfoFile.getAliasMap()可以通过此方法获取所有受支持的时区格式具体格式另行百度

@JsonInclude

JsonInclude.Include.NON_NULL

@Lazy

延迟加载,当需要对象的时侯才去创建,不需要时不创建

@Lazy和@Scope("prototype")不可以同时存在,理念是冲突的

@Mapper

指定这是一个操作数据库的mapper

mapper中方法sql操作数据

@MapperScan

将指定包中的所有接口自动默认为添加了mapper注解

value:扫描包的引用地址

@Select("select * from department where id=#{id}")

@Delete("sql")

@Insert("sql")

@Update("sql")

@Options(useGeneratedKeys = true,keyProperty = "id")

设置是否使用自动生成的主键及其主键名称

@Param("field_name")

指定字段映射实际名称

@Order

设置注册bean的注册顺序

@PathVariable("id")

获取path路径变量

@PropertySources

多个资源不同配置引用

@PropertySource

引入配置文件 标注类上

value:填写配置文件的路径:参考:classpath:/***.properties / {"classpath:/person.properties"}

encoding:设置编码格式

@PostConstruct

Bean初始化之前,构造方法执行之后,声明自定义操作方法 要求方法返回void值

@PreDestroy

Bean销毁时,构造方法执行之后,执行的自定义方法 要求方法返回void值

@RestControllerAdvice

描述类为一个全局异常处理对象 当异常未处理时,系统会调用对应的全局异常处理里的对应处理方法

相当于 @ControllerAdvice+@ResponseBody

@ControllerAdvice

注册异常处理控制器

@ExceptionHandler(*Exception.class)

标注方法为异常处理 异常或自定义异常类的class

@Resource

使用场景:属性 setter

作用:装配注入bean

装配方式:byname 没有通过 bytype查找

@Respository

该注解用于数据访问层(Dao层)的类标识为Spring中的Bean,功能与

@Component相同

@RequestParam("user")

请求参数

@Scope

设置bean作用域

singleton:单例 可配合懒加载使用 默认

prototype:bean多实例模式

@SpringBootTest

自动搜索配置类 标注位置:类 集成测试 @ExtendWith+@ContextConfiguration

webEnvironment:端口号配置 参考值如下

SpringBootTest.WebEnvironment.RANDOM_PORT:随机端口号

SpringBootTest.WebEnvironment.DEFINED_PORT:默认端口号

SpringBootTest.WebEnvironment.MOCK:

SpringBootTest.WebEnvironment.NONE:不使用端口号

@SpringBootApplication

标注主程序类 说明一个spring boot应用

@Service

该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的

Bean,其功能与@Component相同

@SpringJUnitConfig

classes:{}

@Test

@BeforeAll

所有测试案例执行前全部执行此注解所描述的方法 先于@BeforeEach

@BeforeEach

每个测试案例执行之前

@AfterAll

所有测试案例执行之后执行该方法 晚于@AfterEach

@AfterEach

每个测试案例执行之后执行该方法

@Value

为单个属性绑定配置文件变量

三种写法:@Value("true") @Value("#{11*2}") @Value("${person.last-name}")

不支持复杂封装对象的赋值

@Validated

数据校验 必须是符合以下格式的数据 二级注解无特殊备注均有message属性为提示信息

@Email

验证数据是否为Email格式

@NotNull

不为空

@NotBlank

不为空白

@Pattern

按照自定的的匹配规则验证

regexp : "" 验证的正则表达式

@Range

值区间

max = 1 最大值

@WebMvcTest(***.class)

元注解

@Target

声明注解的使用限定场景

ElementType.METHOD 限定标注在方法上

ElementType.TYPE 限定标注在类

@Retention

设置注解生命周期 默认字节码文件不可被反射机制调用

RetentionPolicy.RUNTIME 类在运行中可以读取

RetentionPolicy.SOURCE 只在源代码里有 编译class字节码文件丢失注释

RetentionPolicy.CLASS 字节码文件有 但是不被反射机制调用

@Documented

当前注解可能被包含在javadoc中

@Repeatable

注解为可重复类型注解,可以在同一个地方多次使用

@Inherited

允许子注解继承

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值