@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格式
@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
允许子注解继承