*按包/功能性/相关性分类
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
开启Spring对AspectJ代理的支持
@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格式
@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
使用此注解声明出来的自定义注解,在使用此自定 义注解时,如果注解在类上面时,子类会自动继承此注解,否则子类不会继承此注解。