在我们使用spring框架的过程中,在很多时候我们会使用@async注解来异步执行某一些方法,提高系统的执行效率。今天我们来探讨下 spring 是如何完成这个功能的。
spring 在扫描bean的时候会扫描方法上是否包含@async的注解,如果包含的,spring会为这个bean动态的生成一个子类,我们称之为代理类(?),代理类是继承我们所写的bean的,然后把代理类注入进来,那此时,在执行此方法的时候,会到代理类中,代理类判断了此方法需要异步执行,就不会调用父类(我们原本写的bean)的对应方法。spring自己维护了一个队列,他会把需要执行的方法,放入队列中,等待线程池去读取这个队列,完成方法的执行,从而完成了异步的功能。我们可以关注到再配置task的时候,是有参数让我们配置线程池的数量的。
因为这种实现方法,所以在同一个类中的方法调用,添加@async注解是失效的!,原因是当你在同一个类中的时候,方法调用是在类体内执行的,spring无法截获这个方法调用。
那在深入一步,spring为我们提供了AOP,面向切面的功能。他的原理和异步注解的原理是类似的,spring在启动容器的时候,会扫描切面所定义的类。在这些类被注入的时候,所注入的也是代理类,当你调用这些方法的时候,本质上是调用的代理类。通过代理类再去执行父类相对应的方法,那spring只需要在调用之前和之后执行某段代码就完成了AOP的实现了!
那最后我们还有一个问题,spring是如何动态的生成某一个类的子类的?代理类?
生成代理类可以通过jdk 和 CGLIB 两种方式生成.具体的可以
参考 1.代理类说明:
http://wenku.baidu.com/link?url=YpU3CNXsyLivMCnpILQ1qQc8PcKuqRrqZd1X8hPNQa9QuBFmbpCugSdjkXlY2L_ey4rUxM7TlwHeAatL65e664h_W8n0IKgTP1vFU5wacrm
2.CGLIB和JDK代理类的区别:
http://www.blogjava.net/hello-yun/archive/2011/11/09/363359.html
这里就不详细说明了
分享到:
相关推荐
Spring @Async 方法如何添加注解实现异步调用 Spring 框架提供了 @Async 注解来实现异步调用,该注解可以在方法上添加,以使得方法被异步调用。下面我们将详细介绍 Spring @Async 方法如何添加注解实现异步调用。 ...
Spring 中异步注解 @Async 的使用、原理及使用时可能导致的问题及解决方法 @Async 注解是一种非常有用的spring 注解,它可以让被标注的方法异步执行,从而提高应用程序的性能和响应速度。但是,@Async 注解的使用也...
总之,理解Spring的代理机制和事务、异步执行的工作原理是解决此类问题的关键。在开发过程中,应尽量避免出现复杂的循环依赖,特别是当涉及到事务和异步处理时,以确保代码的稳定性和可维护性。
深入理解Spring注解@Async解决异步调用问题 本文将详细介绍Spring框架中的@Async注解,并深入理解其在解决异步调用问题中的应用。通过示例代码和详细的解释,帮助读者更好地理解@Async的使用和原理。 一、异步调用...
本文将深入探讨@Async的工作原理、配置方法以及使用场景,帮助你更好地理解和应用这一特性。 1. **@Async注解的引入** - `@Async`属于Spring框架的一部分,位于`org.springframework.scheduling.annotation`包下。...
下面将详细解释如何在Spring Boot中使用`@Async`实现异步调用,以及其背后的原理。 首先,要启用`@Async`注解的功能,需要在Spring Boot的主配置类上添加`@EnableAsync`注解。这会告诉Spring框架,你需要异步任务的...
本文将详细介绍 Spring Boot 异步调用 @Async 过程详解的实现原理、使用方法和优点。 一、@Async 使用演示 @Async 是 Spring 内置的注解,用来处理异步任务。在 Spring Boot 中,使用 @Async 需要在启动类上加上 @...
下面将详细介绍 Spring Boot @Async 异步方法的使用和原理。 什么是异步调用 异步调用是指在不阻塞主线程的情况下执行高耗时方法。这种方式可以提高系统的响应速度和吞吐量。 常规异步 常规异步是通过开启新线程...
本文将深入探讨`@Async`的工作原理、使用场景以及如何配置和测试。 1. **异步注解的启用** 使用`@EnableAsync`注解在配置类上,表明该应用支持异步方法执行。例如: ```java @Configuration @EnableAsync @Slf...
在Spring框架中,定时任务是实现自动化...以上就是关于Spring定时任务`@Scheduled`的例子,包括其工作原理、配置以及在实际项目中的应用。理解并熟练运用这些知识,能够帮助我们构建更加高效、自动化的Spring应用程序。
总结起来,Spring Boot的异步调用功能通过`@Async`注解提供了一种简单且高效的方式来并行执行任务,避免了因为单一耗时操作导致的阻塞。它利用了Spring的并发支持,如线程池,使得开发者无需直接处理多线程的复杂性...
本篇将深入探讨`@Async`注解的工作原理、使用场景以及如何在实际项目中应用。 `@Async`是Spring框架提供的一个注解,它允许我们将方法标记为异步执行。这意味着当该方法被调用时,不会立即返回结果,而是会启动一个...
本文将深入探讨Spring Task的执行原理以及遇到的一些常见问题。 1. **Spring Task与Cron表达式** - Spring Task支持使用Cron表达式来定义任务的执行周期,这种表达式与Linux中的crontab类似但并不完全相同。Cron...
10. **Async Support**:Spring MVC支持异步处理,可以通过`@Async`注解标记方法为异步,从而提高系统性能。 11. **MVC Annotation-driven**:Spring MVC提供了注解驱动的功能,使得开发者可以使用注解来简化配置,...
2. **Spring Boot 定时任务原理** - **线程池配置**:在 Spring Boot 中,定时任务默认使用的是一个单线程的 ScheduledExecutorService,这意味着默认情况下,所有定时任务将会按照顺序串行执行。如果需要并发执行...
此外,Spring还提供了`@Async`注解来实现异步任务,与`@Scheduled`不同的是,`@Async`适用于一次性或者无固定时间间隔的任务。结合`@EnableAsync`,可以将方法异步执行,提高系统的并发性能。 在实际开发中,我们...
本文将深入探讨Spring Boot中的定时任务原理,以及如何解决可能出现的问题。 首先,Spring Boot使用`@EnableScheduling`注解开启定时任务的调度功能。这个注解从Spring 3.1开始引入,它告诉Spring容器需要启动一个...
1. **异步支持**:Spring 4.0开始引入了对异步操作的支持,可以通过`@Async`注解标记方法来实现异步调用。 2. **Restful支持**:Spring提供了RestTemplate等工具类来支持Restful风格的服务开发。 3. **Spring Boot**...
在分析Spring 3.1源码时,可以深入了解这些特性的实现原理,以及Spring如何通过模块化设计来实现高内聚、低耦合。这将有助于开发者更好地理解和使用Spring框架,同时也能提升问题排查和性能优化的能力。对于想要深入...