springboot注释详解

*按包/功能性/相关性分类

org.springframework.stereotype

        @Component

                元注解:@Documented        @Target        @Retention        @Indexed

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

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

        @Controller

                元注解:@Component        @Documented        @Target        @Retention

                配合组件扫描创建控制器对象

        @Indexed

        

        @Repository

                元注解:@Component        @Documented        @Target        @Retention

        @Service

                元注解:@Component        @Documented        @Target        @Retention

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

                Bean,其功能与@Component相同

org.springframework.context.annotation

        @Bean

                元注解:@Documented        @Target        @Retention

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

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

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

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

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

        @ComponentScan

                元注解:@Documented        @Target        @Retention        @Repeatable

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

        @EnableAspectJAutoProxy

                元注解:@Documented        @Target        @Retention        @Import

                开启SpringAspectJ代理的支持

        @Scope

               元注解:@Documented        @Target        @Retention

                设置bean作用域

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

                prototype:bean多实例模式

        @PropertySource

                元注解:@Documented        @Target        @Retention        @Repeatable

                加载配置文件 标注类上

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

                encoding:设置编码格式

javax.annotation

        @PostConstruct

                元注解:@Documented        @Target        @Retention

                JSR-250提供,在构造函数执行完之后执行

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

        @PreDestroy

                元注解:@Documented        @Target        @Retention

                JSR-250提供,在Bean销毁之前执行

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

        @Resource

                元注解: @Target        @Retention

                使用场景:属性 setter        JSR-250提供

                作用:装配注入bean

                装配方式:首选byname 自动注入,匹配失败按照 bytype匹配注入

org.springframework.beans.factory.annotation

        @Value

                元注解:@Documented        @Target        @Retention

                为单个属性绑定配置文件变量         不支持复杂封装对象的赋值

                示例:@Value("true") @Value("#{11*2}") @Value("${person.last-name}")

        @Autowired

                元注解:@Documented        @Target        @Retention

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

                作用:装配注入bean

                装配方式:默认:bytype 类型装配失败使用ByName匹配

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

org.springframework.scheduling.annotation

        @EnableScheduling

                元注解:@Documented        @Target        @Retention        @Import

                在配置类上使用,开启计划任务的支持

org.aspectj.lang.annotation

        @Before

                元注解:@Target        @Retention

               方法执行之前执行

                使用示例:@Before("bean(userServiceImpl)")

        @After

                元注解:@Target        @Retention

                方法执行之后执行 异常不计

                示例:@After("bean(userServiceImpl)")

        @AfterReturning

                元注解:@Target        @Retention

                方法正常执行完毕之后执行

                vaue:"bean(userServiceImpl)"

                returning : "result"

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

        @AfterThrowing

                元注解:@Target        @Retention

               方法出现异常之后执行        可以看到异常不能处理

                value :"bean(userServiceImpl)"

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

        @Around

                环绕通知

                示例:@Around("bean(userServiceImpl)")

        @Pointcut

                元注解:@Target        @Retention

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

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

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

                .. 匹配0或多次

                示例:@Pointcut("bean(userServiceImpl) || bean(awardServiceImpl)")

        @Aspcet

                元注解:@Target        @Retention

                声明一个切面类

org.springframework.transaction.annotation

        @Transactional

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

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

                value:transactionManager别名 单事务管理器时不需要显式声明  多个事务管理器使用使用此属性显式声明否则异常

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

                readOnly:只读 默认false 可以为只读提高性能优化  不能修改

                rollbackFor:

                        定义哪些异常会导致事务回滚。默认RuntimeException和Error导致事务回滚。

                rollbackForClassName:

                noRollbackFor:指定异常不会回滚

                noRollbackForClassName:

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

                        Propagation

                                REQUIRED:默认 无事务创建新建事务,有事务延用当前事务

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

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

                                never:始终无事务执行 无事务继续无事务状态执行 有事务抛异常

                                not_supported:不使用事务,当前无事务保持,有事务暂停当前事务在无事务状态下执行

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

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

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

                isolation:事务隔离级别        一个事务与其他事务的隔离程度

                        Isolation

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

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

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

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

                        常用:READ_COMMITTED, MySQL默认: REPEATABLE_READ

@AutoConfigurationPackage

        自动配置包       

@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

        声明当前类为自动配置类

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

@ConfigurationProperties(prefix = "person")

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

支持松散绑定语法

支持JSR303数据校验

@EnableConfigurationProperties(***.class)

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

        @RestController

                         元注解:@Controller        @RespanseBody        @Documented        @Target        @Retention

                        等效于 @Controller+@RespanseBody

@ResponseStatus

        元注解:@Documented        @Target        @Retention

        设定HTTP响应状态码

@ResponseBody

        元注解:@Documented        @Target        @Retention

        控制器方法的返回体绑定到HTTP响应体

@RequestBody

        元注解:@Documented        @Target        @Retention

        标注在方法参数,表示网络请求正文映射到丰富参数

@RequestHeader

        元注解:@Target        @Retention

        映射请求头到控制器方法参数

@RequestMapping

        元注解:@Mapping        @Documented        @Target        @Retention

        映射请求到控制器方法

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

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

        @PostMapping

                将HTTP POST请求映射到特定的处理方法的注解

        @GetMapping

                将HTTP GET请求映射到特定的处理方法的注解

        @PutMapping

        @DeleteMapping

@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并实现相关业务

@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文件

@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

        元注解:@Documented        @Target        @Retention

        将请求路径上“URI模版映射到控制器的方法参数上

@PropertySources

多个资源不同配置引用

@RestControllerAdvice

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

相当于 @ControllerAdvice+@ResponseBody

@ControllerAdvice

注册异常处理控制器

@ExceptionHandler(*Exception.class)

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

@Respository

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

@Component相同

@RequestParam

        元注解:@Documented        @Target        @Retention

        将请求参数映射到控制器方法参数上

@SpringBootTest

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

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

SpringBootTest.WebEnvironment.RANDOM_PORT:随机端口号

SpringBootTest.WebEnvironment.DEFINED_PORT:默认端口号

SpringBootTest.WebEnvironment.MOCK:

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

@SpringBootApplication

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

@SpringJUnitConfig

classes:{}

@Test

@BeforeAll

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

@BeforeEach

每个测试案例执行之前

@AfterAll

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

@AfterEach

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

@Validated

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

@Email

验证数据是否为Email格式

@NotNull

不为空

@NotBlank

不为空白

@Pattern

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

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

@Range

值区间

max = 1 最大值

@WebMvcTest(***.class)

java.lang.annotation

        @Target

                声明注解的使用限定场景

                ElementType

                        METHOD        方法注解

                        TYPE        类型注解(类/接口/枚举)

                        FIELD        属性注解

                        PARAMETER        方法内参数注解

                        CONSTRUCTOR        构造方法注解

                        LOCAL_VARIABLE        局部变量注解

                        ANNOTATION_TYPE        注解的注解

                        PACKAGE        包注解

                        TYPE_PARAMETER

                        TYPE_USE        

        @Retention

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

                RetentionPolicy

                        RUNTIME        类在运行中可以读取        JVM加载

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

                       CLASS        字节码文件有 但是不被反射机制调用        JVM不加载

        @Documented

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

        @Repeatable

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

        @Inherited

                使用此注解声明出来的自定义注解,在使用此自定 义注解时,如果注解在类上面时,子类会自动继承此注解,否则子类不会继承此注解。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP(Mr. Hamster)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值