java中常用注解(更新中)

元注解:修饰注解的注解

@Target(ElementType.位置)

作用:声明被修饰的注解只能在哪些位置使用,属于空间范畴
位置:

  1. TYPE,类,接口
  2. FIELD,成员变量
  3. METHOD,成员方法
  4. PARAMETER,方法参数
  5. CONSTRUCTOR,构造器
  6. LOCAL_VARIABLE,局部变量

@Retention(RetentionPolicy.保留周期)

作用:声明注解的保留周期,属于时间范畴
保留周期:

  1. SOURCE: 只作用在源码阶段,字节码文件中不存在
  2. CLASS(默认值): 保留到字节码文件阶段,运行阶段不存在
  3. RUNTIME(开发常用): 一直保留到运行阶段。

Spring

@ComponentScan(“com.itheima”)

标注在主配置类上,用于声明包扫描的范围

image.png

控制反转(IOC)

Bean 的创建

标注在自己开发的上,用于将当前类对象放入Spring容器:

@Controller:在表示层类上使用
@Service:在业务层类上使用
@Repository:在持久层类上使用
@Component:在不属于三层的类上使用
Bean的作用域

标注在上,声明对象是单例还是多例:

  • @Scope(“singleton”):创建单例对象
  • @Scope(“prototype”):创建多例对象

@Lazy 延迟对象创建时机

依赖注入

@Autowired

标注在属性上,表示自动依赖注入,用于从Spring容器中获取属性的值,Spring会根据被标注对象的类型自动从IOC容器中查找

  • 如果找不到,就会报错 NoSuchBeanDefinitionException
  • 如果恰好找到一个,就会自动完成依赖注入
  • 如果找到了多个,也会报错 NoUniqueBeanDefinitionException

image.png

@Qualifier
  • 依赖注入时,根据一个接口查到了多个对象,使用这两个注解确定使用哪个对象
  • 标注在要赋值的属性上,代表在按照类型匹配的基础上,再按照指定名称匹配
  • 注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用

@Primary
  • 依赖注入时,根据一个接口查到了多个对象,使用这两个注解确定使用哪个对象
  • @Primary标注在实现类上,表示当一个接口有多个实现的类时,默认使用哪个作为主实现
  • 注意:在同一个接口下,不能同时在多个实现类设置

第三方Bean

@Bean

写在方法上,表示将该方法的返回对象添加到Spring容器中,Bean的名称默认是方法名

@Configuration

写在配置类上,表示该类是一个配置类,Spring在启动的时候会自动扫描加载类中的配置

测试类优化

@RunWith(SpringJUnit4ClassRunner.class)

帮我们启动Spring容器
//等价于

//        1.读取配置类中的配置信息,然后启动spring容器
AnnotationConfigApplicationContext act = 
new AnnotationConfigApplicationContext(SpringConfig.class);

@ContextConfiguration(classes = SpringConfig.class)

指定配置类

image.png

Spring AOP

@EnableAspectJAutoProxy :激活切面自动代理

写在配置类中

@PointCut:切入点表达式
  • 作用:主要用来决定项目中的哪些方法需要加入通知
  • 常见形式:
    • execution(……):根据方法的签名来匹配
    • @annotation(……) :根据注解匹配

image.png

image.png

@Aspect:定义切面类,加上@Component注解

image.png

@Order:主要用来控制配置类的加载顺序

image.png

通知类型(前四个和后边的环绕通知互斥,直接用环绕通知就可以)

@Before:前置通知

此注解标注的通知方法在目标方法前被执行

@AfterReturning: 返回后通知

此注解标注的通知方法在目标方法后被执行,有异常不会执行

@AfterThrowing: 异常后通知

此注解标注的通知方法发生异常后执行

@After:后置通知

此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行

@Around环绕通知

需要自己调用 ProceedingJoinPoint.proceed() 来让原始方法执行,其他通知不需要考虑目标方法执行
@Around环绕通知方法的返回值,必须指定为Object,来接收原始方法的返回结果

事务管理

@Transactional

位置:业务(service)层的方法上、类上、接口上
作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务

SpringMvc

Controller类上

@Controller
  • 标注在表示层,Spring会使用注解标注的类创建出对象,然后放入容器
  • 简化:@RestController = @Controller + @ResponseBody ;所以可以直接使用@RestController

@ResponseBody
  • 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合 ,将会转换为JSON格式响应
  • 位置:Controller方法上/类上(如果标在类上,代表类中所有方法上都生效)
  • 简化:@RestController = @Controller + @ResponseBody ;

所以可以直接使用@RestController

@RestController

image.png

@RestController中包含5个注解,所以可以直接省略@Controller@ResponseBody注解

方法上+类上

@RequestMapping:用于映射web请求,包括访问路径和参数
  • 位置: 方法 类
  • @RequestMapping(value = “/user/demo1”,method = RequestMethod.GET
  • 属性:
    • value: 等同于path,用于为当前方法绑定访问路径
    • method:用于限制请求类型,如果省略此选项,代表不对请求类型做限制
  • 注意:此注解也可以标注在类上,代表类中的所有方法都可以共用一段URL

Restful风格接口:根据请求类型使用不同的注解

@PostMapping

用于增加信息

@PutMapping

用于更改信息

@GetMapping

用于查询信息

@DeleteMapping

用于删除信息

接收参数

@RequestParam :集合

1. 场景1:使用List或者Set接收参数的时候
请求参数名与形参集合名称相同且请求参数为多个,使用@RequestParam 绑定参数关系
image.png

** 2.场景2:接收参数名和URL路径中参数不一样的时候**
** 3.场景3:给参数设置默认值**
image.png

@DateTimeFormat:日期参数格式转换

image.png

@RequestBody :请求体中json
  • SpringMVC也可以接收请求体中的json字符串为参数,并且自动封装为指定对象
  • 使用 @RequestBody 标注请求参数之前,表示从请求体中接收json参数,并且封装到指定的对象
  • @RequestBody 只能标注在对象或者是一个Map前面

image.png

@PathVariable:路径参数
  • @PathVariable: 通过请求路径传入参数
  • 步骤:
    • 1)请求路径上使用{}占位
    • 2)使用@PathVariable将占位符位置的数据赋值到指定的参数

image.png

全局异常处理

@RestControllerAdvice

标注在类上,声明当前类是一个用于专门处理异常的类
image.png

@ExceptionHandler

标注在方法上,声明当前方法可以处理哪些异常
image.png

SpringBoot

定时任务控制

@Scheduled

@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。
@Scheduled需要配合@EnableScheduling使用。使用时,将@Scheduled注解放在待定时的方法名上方,将 @EnableScheduling放在项目主启动类类名上方。


@Scheduled主要有三种配置执行时间的方式:cron、fixedRatefixedDelay

**关于 fixedRate 和 **fixedDelay的区别:

  • fixedRate** 的间隔时间是上次任务开始后,开始计算时间间隔,达到指定时间间隔后,开始执行下一次任务;**
  • fixedDelay 的间隔时间是上次任务结束后,开始计算时间间隔,达到指定时间间隔后,开始执行下一次任务。
  • cron@Scheduled的一个参数,是一个字符串,以空格隔开。
cron表达式格式:
@Scheduled(cron = "{秒数} {分钟} {小时} {日期} {月份} {星期}")30 10 1 20 10 ? 20112011102011030秒触发任务 
 
“30 10 1 ? 10 * 2011201110月每天11030秒触发任务 
 

自动生成构造方法

@RequiredArgsConstructor
  • @RequiredArgsConstructor是一个Lombok提供的注解,用于自动生成构造函数。
  • 基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入.
  • 可以用来代替@Autowired注解注入
  1. 声明的变量必须加上final修饰
  2. 区别:
    • @Autowired :
    • @RequiredArgsConstructor:
      1. 先在 controller 类上添加注解:
        在这里插入图片描述
      2. 用到的时候可以直接

SpringCloud

Feign

@EnableFeignClients
  • 在启动类中使用,用于启用 Feign 客户端的功能
  • 会自动扫描指定的包和子包,查找所有标记了 `@FeignClient 的接口
  • basePackages** 属性:用来指定要扫描的基础包或类**
  • 可以@Configuration 注解一起使用,允许你在同一个类中定义配置和启用 Feign 客户端。

image.png

@FeignClient
  • 用于标记一个接口作为 Feign 客户端。
  • 可以在该注解中指定服务名(**name**、服务路径(path)等信息。

image.png

Conditional 系列注解

此系列注解为按照条件判断

@ConditionalonClass()
  • 该注解可以用在类及方法上指的是标有@Configuration的类,方法是标有@Bean的方法
  • @ConditionalOnClass注解的作用是当项目中存在某个类时才会使标有该注解的类或方法生效
  • 属性: name属性,name属性指定的是全限类名,也就是包含包名+类名
  • image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值