【学习笔记】记录遇到的注解们

@Autowired 可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。通过 @Autowired的使用来消除set,get方法。默认情况下spring是按照类型byType装配的,主要针对相同类型的对象只有一个的情况。若存在两个相同对象,@Autowired会加载失败报错,这时可以改用按名称装配:byName,只需在代码上加上@Qualifier注解即可,例如@Qualifier(“user1”)。除@Qualifier外,还能使用@Primary注解解决上面的问题。在User1上面加上@Primary注解,即可优先被创建。
特殊用法:1、spring会在项目启动的过程中,自动调用一次加了@Autowired注解的方法,我们可以在该方法做一些初始化的工作。2、@Autowired也可以用在形参的列表上,可以在构造器的入参上加Autowired注解,也可以在非静态方法的入参上加Autowired注解
@Resource 一般用在类属性或者setter方法上声明属性需要自动装配,和@Autowired区别是,@Resource是默认按照名称byName装配的,所以前者存在多bean问题,而后者只要保证bean命名唯一就不会出现多bean的问题。如果在Resource注解中指定了bean的名称,则Spring会按注解中的name属性查找合适对象,然后进行装配。如果注解中没有指定名称,先按类属性的变量名查找,如果还是未找到,则按类型进行查找。
区别总结
@Autowired默认按byType自动装配,而@Resource默认byName自动装配。
@Autowired只包含一个参数:required,表示是否开启自动准入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
@Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
@Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。
@Autowired是spring定义的注解,而@Resource是JSR-250定义的注解。

@Override 注解是伪代码,用于表示被标注的方法是一个重写方法。只能用于标记方法,并且它只在编译期生效,不会保留在class文件中。可检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。

@Component Spring框架中的一个通用注解,用于标记一个类为组件,让Spring能够在应用程序启动时自动扫描并加载这些组件。在类上添加@Component注解,即可将该类标记为一个组件,这样,Spring会自动扫描该类,并将其实例化为一个Bean,可以在其他地方通过依赖注入的方式使用。

@Slf4j 是添加在类上的注解,用来打印日志。添加后即可使用语句log.error(“错误”);log.info(“信息”);log.debug(“信息”);log.warn(“警告”);

@Value(“”) 用于获取指定的数据,在定义变量时使用
(1)常量注入:@Value(“normal”)
(2)bean属性、系统属性、表达式注入@Value(“#{}”)
(3)配置文件属性注入@Value(“${}”)

@PostConstruct Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法,可作为一些数据的常规化加载,比如数据字典之类的,或者用作spring项目的定时任务。特点:方法非静态、无参数、无返回值、无抛出异常、仅执行一次。
类初始化调用顺序: Constructor(构造器) >> @Autowired >> @PostConstruct

@NotNull 不能为 null,但可以为 empty,一般用于判空 Integer 类型等基本数据类型,而且被其标注的字段可以使用 @size、@Max、@Min 对数值进行大小的控制
示例: @NotNull(message = “库存不能为空”)
@Min(value = 0,message = “库存不能小于0”)
private Integer stock;
@NotEmpty 不能为 null,且长度必须大于 0,一般用于集合类或者数组上,也有人用于String(不推荐)
示例: @NotEmpty(message = “图片链接不能为空”)
private List picLink
@NotBlank 只能作用在接收的 String 类型上,不能为 null,而且调用 trim() 后,长度必须大于 0。即:必须有实际字符
示例: @NotBlank(message = “商品名称不能为空”)
private String title;
@Valid 主要用于数据效验,主要用法是:在实体中的属性上,添加不同的注解(如上三个)来完成不同的校验,然后在接口类中的接收数据参数中添加 @Valid 注解。例在 Controller 对应方法上,对需要验证的字段标上 @Valid 注解,则表示这个对象属性需要进行(如上三个)验证。另一种用法:用于实体类中嵌套的实体上,不加此注解,则不会校验,例如,其中Address是个实体类:
@Valid //不加此注解,则不会校验
@NotNull(message = “用户住址不能为空”)
private Address address;

需在SpringApplication主启动类上加上启用缓存注解@EnableCaching
@Cacheable 增加缓存。缓存存在,则使用缓存;不存在,则执行方法,并将结果塞入缓存。用于修饰方法or类
属性释义:
value:缓存的名字
key:缓存的key唯一标识
keyGenerator :key生成器
cacheManager :缓存管理器
condition :可以设置指定条件下才执行缓存操作
sync :异步模式
@CacheEvict 清除缓存
属性释义:
key:缓存的key,默认为空。缓存多了无法定位,所以最好还是加上且最好是唯一识别
value:缓存名称,不能为空
condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL表达式
allEntries:true表示清除value中的全部缓存,默认为false
@CachePut 更新缓存

@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
@RequestParam 主要用于将请求参数区域的数据映射到控制层方法的参数上
@RequestHeader 注解是Spring框架中的一个注解,用于从HTTP请求头中获取特定的信息。如用户代理、授权信息、内容类型等。可以用于方法的参数或方法的参数注解上。当用于方法的参数时,它将绑定HTTP请求头的值到方法参数上;当用于方法的参数注解时,它将绑定特定请求头的值到被注解的参数上。
@RequestAttribute注解:获取请求域中所保存的属性的值。
@PathVariable 绑定uri模板变量值,通过@PathVariable可以绑定占位符参数到方法参数中
@RequestBody 作用在形参列表上,用于将前台发送过来固定格式的数据【xml格式 或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。
@ResponseBody 注解作用在方法上,表示方法的返回值将直接作为响应体,而不是进行视图解析。

@Controller 用于标识一个类是控制器,负责接收和处理请求,同时返回视图或模型数据。
@RestController 将 @Controller 和 @ResponseBody 注解组合在一起。方法返回的是数据,通常是以 JSON、XML 等形式进行输出,而不是视图。

@Service注解用于告诉Spring容器,被注解的类是一个服务类。它是Spring框架中的一个组件扫描注解,用于自动扫描并创建实例,以便在应用程序中使用。
在某些情况下,@Service注解还可以与@Transactional注解一起使用,以便将受检查的异常转换为Spring的DataAccessException异常。这有助于在持久层代码中处理数据库操作时,将异常统一转换为Spring的异常体系。
@Transactional注解用于在Spring应用程序中管理事务。它可以与@Service注解一起使用,以确保在服务类的方法中应用事务管理。事务管理可以确保在数据库操作期间的异常情况下,数据的一致性和完整性。

@Reponsitory 标注在Dao层接口上,与@Controller,@Service的作用一样都是把对象交给Spring管理。使用这个注解的前提是必须在启动类上添加@MapperScan(“Mapper接口层路径”) 注解。这个@Repository完全可以省略不写,也完全可以实现自动注入,但是在IDEA中会存在一个红色的波浪线。
@Mapper 一般使用在Dao层接口上,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类。加入了@Mapper注解,目的就是为了不再写mapper映射文件。这个注解就是用来映射mapper.xml文件的。使用@Mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。
@Mapper注解写在每个Dao接口层的接口类上,@MapperScan注解写在SpringBoot的启动类上。
@Mapper注解相当于是@Reponsitory注解和@MapperScan注解的和,会自动的进行配置加载。
@MapperScan注解多个包,@Mapper只能把当前接口类进行动态代理。
在SpringBoot的启动类上给定@MapperSacn注解。此时Dao层可以省略@Mapper注解,@Repository注解可写可不写,最好还是写上。
当使用@Mapper注解的时候,可以省略@MapperSacn以及@Repository。

@Configuration 从Spring3.0开始使用,用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@ConfigurationProperties是springboot提供读取配置文件的一个注解。适用于读取、加载大量的配置文件中的自定义配置项。
@EnableConfigurationProperties(A.class)注解的作用是:使 使用 @ConfigurationProperties 注解的A类生效,并且将该类注入到 IOC 容器中,交由 IOC 容器进行管理。
如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或者实现了@Component的其他注解,那么在IOC容器中是获取不到properties 配置文件转化的bean,不能完成 xxx.properties 配置文件和 Java Bean 的数据绑定。而 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入,类似于@Component。

@AutoConfigureAfter注解是用于Spring Boot中的自动配置类中的一个注解,它表示一个配置类会在另一个配置类之后自动配置。相反作用的是@AutoConfigureBefore
@ComponentScan:用于类或接口上,主要是指定扫描路径,spring会把指定路径下带有指定注解的类注册到IOC容器中。会被自动装配的注解包括@Controller、@Service、@Component、@Repository等等。例如springboot的启动注解@SpringBootApplication就内置了该注解
@Import:用来导入其他的@Configuration配置类。
@ImportResource:用来导入xml配置文件,比如某些配置一定要xml配置。
@Bean:用来定义一个bean,可以指定初始、销毁方法,及bean范围等。

@AllArgsConstructor 用于生成全参构造函数,默认生成构造函数的访问权限也是public。注解加在类上时,会为所有字段生成构造函数。该注解和final可以替换掉@Autowired或@Resource。(注解会与@Value冲突,此时建议使用@RequiredArgsConstructor)(如果使用了@Value注入,@Value注入会失效,是因为@Value注解是通过对象的set方法赋值的,构造方法的执行还在set方法之前,所以在构造方法中使用变量会变量为null。)
@Data 用于生成Java Bean所需的所有方法。注解加在类上时,会自动为类的所有属性添加getter和setter方法,此外还会自动生成equals、hashCode、toString、constructor等方法。
@NoArgsConstructor 注解用于生成无参构造函数,默认生成的构造函数是public权限的。如果自己定义了有参构造函数,那么无参构造函数就不会被生成,除非使用了**@ForceArgsConstructor**注解强制生成所有参数的构造函数。
@RequiredArgsConstructor 注解用于生成含有必选参数的构造函数,这个注解会自动为 final 修饰的字段和 @NotNull 注解的字段生成对应的构造方法参数和赋值语句。使用场景可以是:有多个@AutoWired注解时代码繁杂,直接使用该注解和final关键字/@NotNull注解 会更简洁

@RefreshScope 是Spring Cloud中的一个注解,用来实现Bean中属性的动态刷新。举例:配置信息存放在nacos中,在代码中使用@Value获取并绑定到变量,当nacos的属性值有变化时,无需重启服务,即可动态更新。

@Conditional 作用是按照一定的条件进行判断,满足条件给容器注册bean。只有一个参数value,并且这个参数要求是继承于Condition类,并且参数是个数组。Condition类是一个函数式接口(只有一个方法的接口被称为函数式接口)。唯一的matches方法就是比较方法,如果为true则注入,如果为false则不注入。
@ConditionalOnBean 当给定的在bean存在时,则实例化当前Bean。
@ConditionalOnMissingBean 当给定的在bean不存在时,则实例化当前Bean。若使用时无参,当它注解到含有@Bean的方法上时,此时目标类型默认为方法的返回类型(如果Applicationcontext中没有包含该返回值类型的bean,那么将创建返回值的bean)。
@ConditionalOnClass 判断是否存在这个类文件,如果有这个文件就相当于满足条件,则实例化当前Bean,注入到容器当中。并不是说容器里面是否有这个类,这就是有时候使用springboot只需要引入个依赖,框架就可以用的原因。
@ConditionalOnMissingClass 判断是否存在这个类文件,如果没有这个文件就相当于满足条件,则实例化当前Bean
@ConditionalOnProperty是指当某个配置项为某个值时才装配。可用于确认配置类是否生效。
@ConditionalOnMissingProperty是指当某个配置项不等于某个值时才装配

@EnableWebSecurity是Spring Security用于启用Web安全的注解。典型的用法是该注解用在某个Web安全配置类上(实现了接口WebSecurityConfigurer或者继承自WebSecurityConfigurerAdapter)。作用,1: 加载了WebSecurityConfiguration配置类, 配置安全认证策略。2: 加载了AuthenticationConfiguration, 配置了认证信息。
@EnableGlobalMethodSecurity 要开启Spring方法级安全,在添加了@Configuration注解的类上再添加@EnableGlobalMethodSecurity注解即可
prePostEnabled: 确定前置注解[@PreAuthorize,@PostAuthorize,@PreFilter,@PostFilter] 是否启用,@PreAuthorize 注解会在方法执行前进行验证,而 @PostAuthorize 注解会在方法执行后进行验证
securedEnabled: 确定安全注解 [@Secured] 是否启用
jsr250Enabled: 确定JSR-250注解 [@RolesAllowed…]是否启用

@PreAuthorize 注解会在方法执行前进行权限验证,支持Spring EL表达式,它是基于方法注解的权限解决方案。当Spring EL 表达式返回TRUE,则权限校验通过。

@SuppressWarnings 是jse提供的注解。作用是屏蔽一些无关紧要的警告,使开发者能看到一些他们真正关心的警告,从而提高开发者的效率。
示例:@SuppressWarnings(“unchecked”)
告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。

@DependsOn 从名称里面就能看出意思是“依赖于”,它的作用就是解决Bean的创建依赖,比如某个Bean在创建的时候依赖另外一个bean,所以需要另外一个bean先创建,然后再创建自己。

@FeignClient 在做springcloud分布式开发过程中会有需要访问其他服务的情况,每一个服务之间都是以接口的方式访问的,那么就需要使用到 @FeignClient 来访问其他服务的接口
value、name: 指定FeignClient的名字,也算是指定调用服务的名称
url:常用于本地调试–指定调用的服务的全路径
path: 定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用
configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
使用方式:
1、首先,在启动类里面加入注解,以声明开启Feign的远程调用:@EnableFeignClients
2、编写接口类,添加注释,标明服务方暴露的接口地址:@FeignClient(value=“xxx”),其接口的内部结构如下所示
@RequestMapping(value=“服务中某一Controller的接口访问地址”, method=RequestMethod.GET)
Result getFeignServerData(@RequestBody Params param);
3、如有fallback,需编写熔断类,发生错误时回调
4、使用时只需要把这个接口注入到我们需要使用的地方就可根据方法名直接调用了

@Target注解自JDK1.5之后就有了,其作用是定义在注解的上方,表明其注解的作用范围。属性value的取值可以是一个,也可以是多个,如果未指定value,表明注解可以作用于任何范围。
示例:@Target({ElementType.METHOD, ElementType.TYPE}) 表示所定义的注解可以作用于方法、类、接口、枚举上。
TYPE:接口、类、枚举
FIELD:字段、枚举的常量
METHOD:方法
PARAMETER:方法参数
CONSTRUCTOR:构造函数
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解
PACKAGE:包

@Documented注解是一个标记注解,用于指示将被注解的元素包含在生成的Java文档中。它本身没有任何属性或配置选项,通常用于自定义注解时,确保其注解信息能在生成的文档中显示。如果声明注解时指定了@Documented,则它会被javadoc之类的工具处理,所以注解类型信息也会被包括在生成的文档中。

@Deprecated 用来标注某个类或者方法不建议再继续使用

@Retention 注解是用来注解的注解,称为元注解,其作用可以简单理解为设置注解的生命周期。
@Retention 注解传入的是 RetentionPolicy 枚举,该枚举有三个常量,分别是 SOURCE、CLASS 和 RUNTIME,三者区别如下:
SOURCE 代表着注解仅保留在源级别中,编译器将Java文件编译成class文件时将之遗弃。
CLASS 代表着注解被保留在class文件中,JVM加载class文件时将之遗弃。
RUNTIME 代表着标记的注解会由JVM保留,因此运行时环境可以使用它。一般来说,我们自己定义的注解都是 RUNTIME 级别的。
.java源文件(.java文件) 、编译后的文件(.class文件) 、内存中的字节码,生命周期比较 SOURCE < CLASS < RUNTIME ,作用范围越来越大

@Primary注解是Java语言中的一个内置注解,它用于指示一个类、方法或字段作为首选的候选对象。类将优先被实例化、方法优先被调用、字段优先被访问。

@ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理,作用于类上。搭配如下三种方法注解使用:
@ExceptionHandler:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;可用于统一处理业务异常。
@InitBinder:用于请求中注册自定义参数的解析,从而达到自定义请求参数格式的目的;可用于做日期格式的统一处理。
@ModelAttribute:表示此方法会在执行目标Controller方法之前执行。可用于提前绑定全局user对象。

@Scheduled注解是Spring Boot提供的用于定时任务控制的注解,主要用于控制任务在某个指定时间执行,或者每隔一段时间执行。必须指定 cron,fixedDelay或fixedRate属性之一。
1、fixedDelay:固定延迟,延迟执行任务。任务在上个任务完成后达到设置的延时时间就执行。
示例:@Scheduled(fixedDelay = 5000) 任务会在上个任务完成后经过5s再执行。
2、fixedRate:定时执行。任务间隔规定时间即执行。
示例:@Scheduled(fixedRate = 5000) 任务每隔五秒便会执行一次。
3、cron:自定义规则执行。一般用6或7个标识符(非官方叫法,方便区分记忆这么叫的)表示任务的执行规则。从左到右用空格隔开分别是:【秒 分 时 日 月 周 年(可省略)】
示例:@Scheduled(cron = “0 0 2 * * ?”) 每天的凌晨两点开始定时执行任务。

@Order(2) 设置注解执行的顺序

@Aspect 定义切面类,加上@Aspect、@Component注解
@Pointcut 定义切面类中的切点,如@Pointcut(“execution(public * com.example.zcs.Aop.controller..(…))”),execution表达式第一个表示匹配任意的方法返回值,第二个表示所有controller包下的类,第三个*表示所有方法,第一个…表示任意参数个数。
以下为关键字介绍:
Aspect(切面):切入一个或多个类的模块
JoinPoint(连接点):程序执行的节点,例如执行方法或处理异常
Advice(通知):切面在连接点执行的动作,例如前置通知
Pointcut(切点):用于匹配连接点,一般通过表达式匹配
Target object(目标对象):被切入的对象,可以被一个或多个切面切入
在切入点上执行的增强处理,主要有五个注解:
@Before 在切点方法之前执行
@After 在切点方法之后执行
@AfterReturning 切点方法返回后执行
@AfterThrowing 切点方法抛异常执行
@Around 属于环绕增强,能控制切点执行前,执行后

@LoadBalancerClient 给特定的服务添加特定的负载均衡策略,相当于注解声明了一个 LoadBalancerClient,它的信息包括 name(value) 即 serviceId,configuration 即对应的 负载均衡 配置
@LoadBalancerClients 全局设置,将多个 @LoadBalancerClient 组合在一起使用,就是声明一组 LoadBalancerClient 了

@EnableCaching 主要作用是缓存管理,始于Spring 3.1版本。帮助开发人员更有效地管理应用中的缓存,提高性能和响应速度。
1、当在配置类中使用@EnableCaching时,会触发一系列的处理器,进而扫描所有Spring Bean。如果这些Bean中存在与@EnableCaching注解对应的缓存,则使用这些缓存中的Bean,无需再次初始化一个新的Bean。
2、该注解也可以作用于Spring Boot的启动类上,以开启缓存功能。

@EnableDiscoveryClient 是 Spring Cloud 提供的一个注解,它用于向应用程序添加服务发现功能。它将应用程序标记为一个Eureka客户端(或其他服务发现组件Zookeeper、Consul等),并启动相应的配置来连接到注册中心进行注册和发现操作。具体来说,在Spring Cloud Eureka中,这个注解会自动创建一个 EurekaInstanceConfigBean 和 EurekaClientBean 作为Spring Bean,并根据application.properties或application.yml文件中定义的属性值配置这些Bean,使其能够连接到 Eureka Server 进行注册和发现。总之,通过添加@EnableDiscoveryClient注解,您可以轻松地将您的微服务应用程序连接到任何支持服务注册与发现的注册中心。

@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。都是能够让注册中心能够发现,扫描到该服务。从Spring Cloud Edgware开始,@EnableEurekaClient 或 @EnableDiscoveryClient 是可省略的。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。
@EnableEurekaServer 用于启动eureka服务端。只需要引入依赖以及在application.yml中做好配置,然后在启动类中加入@EnableEurekaServer注解,eureka服务端就可以工作了

@EnableScheduling Spring框架提供的注解,用于启用基于注解的定时任务调度功能。作用就是开启Spring的定时任务功能,通过扫描带有 @Scheduled 注解的方法,自动创建定时任务并执行。同时还提供了一些默认的配置,例如默认的任务调度器等。此注解可以加到启动类上也可以加到执行调度任务类上。
使用场景:
1、定时任务执行:通过在需要执行定时任务的方法上添加@Scheduled注解,配合@EnableScheduling注解,可以实现简单的定时任务调度。
2、使用Cron表达式设定定时任务:通过设置@Scheduled注解中的cron属性,可以按照特定的时间规则执行定时任务,例如每天凌晨执行、每周某一天执行等。
3、异步执行定时任务:结合@EnableAsync注解和@Async注解,可以在定时任务方法上进行异步调用,实现任务的并发执行。
4、配置任务执行策略:除了简单的定时任务执行外,@Scheduled注解还提供了其他属性,如fixedDelay、fixedRate等,可用于配置任务的执行间隔或延迟时间。
5、多个定时任务方法同时存在:通过在多个方法上添加@Scheduled注解,可以实现多个定时任务方法同时存在并按照自定义的时间规则执行。

@EnableFeignClients 使用注解@EnableFeignClients启用feign客户端;扫描和注册feign客户端bean定义。需搭配@FeignClient注解使用。

@SpringBootApplication 标注这是一个springboot的应用,被标注的类是一个主程序。它是一个组合注解,相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值

@EnableAutoConfiguration:开启自动配置,将主配置类所在包及其下面所有后代包的所有注解扫描

@EnableAsync 开启异步执行支持
@Async 标识异步方法,让方法能够在异步线程中执行。
当你在Spring管理的bean的方法上使用@Async注解时,这些方法将在单独的线程中异步执行,不会阻塞调用线程。为了使@Async注解生效,必须在配置类或启动类上声明@EnableAsync注解。这样,Spring就能够创建代理并管理异步方法的执行。
使用@Async注解的方法通常需要满足以下条件:
1、方法必须被@EnableAsync注解的配置类或XML配置文件所启用。
2、异步执行的方法不能在同一个类中调用,因为基于代理的机制只有在通过代理调用方法时才能应用异步行为。
3、@Async注解可以带有一个可选参数,用于指定使用的线程池名称,以便更好地控制并发和资源使用情况。
异步执行的应用场景包括:
1、异步执行耗时较长的操作,如网络请求、数据库查询等,以避免阻塞主线程。
2、提高系统的并发处理能力,通过并行执行多个任务来提高整体性能。
3、实现异步事件处理,例如消息队列消费者等。
需要注意的是,@Async注解通常与Spring框架一起使用,并且可能需要配置任务执行器(TaskExecutor),无论是使用Spring提供的默认任务执行器还是自定义任务执行器。

@Lazy 主要作用是延迟初始化对象。在Java和特别是在Spring框架中,通常对象会在类被加载时立即初始化。然而,使用@Lazy注解,对象的初始化会被推迟到第一次使用该对象时进行。这种方式可以提高程序的效率,因为它避免了不必要的资源浪费,只有在真正需要使用该对象时才进行初始化。@Lazy注解通常用于依赖注入,可以解决循环依赖问题,并减少Spring容器的启动时间。此外,@Lazy注解可以应用于类级别或方法级别。在类级别上使用,表示整个类被延迟加载;在方法级别上使用,则仅对该方法返回的对象进行延迟加载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值