Spring3中提供了一个功能,就是在一个方法上添加注解,调用这个方法的时候自动在线程池中异步话执行。
由于老系统暂时无法升级到spring的3版本,所以翻了一下Spring3中的实现代码。
Spring3中总体就是Spring的AOP和Schema,这两个方式,至于Spring3中注解异步化的使用,这里就不介绍了。
实现思路:
1、搞一个注解来做标志位(就是添加了这个注解,方法自动异步化);
2、用Aspect来处理注解;
3、系统直接使用;
1、注解代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package org.iamzhongyong.framework;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/** * 自定义的注解,添加了这个注解之后,方法执行的时候会异步来执行
* @author bixiao.zy
*/
@Target ({ElementType.METHOD, ElementType.TYPE})
@Retention (RetentionPolicy.RUNTIME)
public @interface OrgAsync {
String value() default "" ;
} |
2、AOP的代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package org.iamzhongyong.framework;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
/** * 异步话执行含有@OrgAsync注解的方法
* @author bixiao.zy
*/
@Aspect public class OrgAsyncAspect {
/**
* 自定义的线程池
*/
private static ExecutorService executor = new ThreadPoolExecutor(
10 ,
15 ,
2000 ,
TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>( 12 ),
new AsyncThreadFactory());
/**
* 1、处理注解,也就是只有OrgAsync这个注解的方法才会起作用
* 2、采用Aspect的环绕增强,然后ProceedingJoinPoint来实现代理的调用
* 3、线程池执行,提交方法
* @param joinPoint
* @return
* @throws Throwable
*/
@Around ( "@annotation(org.iamzhongyong.framework.OrgAsync)" )
public Object asyncExecutor( final ProceedingJoinPoint joinPoint) throws Throwable {
Future<?> result = executor.submit( new Callable<Object>() {
public Object call() throws Exception {
Object result = null ;
try {
result = joinPoint.proceed();
if (result instanceof Future){
return ((Future<?>) result).get();
}
} catch (Throwable e) {
//
}
return result;
}
});
return result.get();
}
} |
3、如何使用
第一步,在Spring的IOC容器中,添加这个标签 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
(这个是启动Aspect的Schema);
第二部,Spring中集成Aspect是采用IOC的思路,所以需要把方法的增强bean添加进来
(<bean id="aysncAspect" class="org.iamzhongyong.framework.OrgAsyncAspect"></bean>);
不足之处:
1、暂时线程池无法满足自定义coreSize和maxSize;
代码地址:https://github.com/iamzhongyong/async
相关推荐
总结,AutoLoadCache是一个强大的缓存管理解决方案,通过AOP和注解实现了缓存与业务逻辑的解耦,同时提供了异步刷新和“拿来主义机制”来提升高并发环境下的性能。它为Java开发者提供了一种简单、高效的方式来管理和...
EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要用于构建可复用...通过注解的使用,可以简化配置,增强代码的表达力,使得在大型企业级项目中,EJB和AOP的结合成为了一种高效且强大的开发模式。
Spring AOP提供了多种通知实现,如`org.springframework.aop.interceptor.AbstractAsyncTimingInterceptor`用于异步方法的性能监控。 4. **切点(Pointcut)**:切点定义了通知的触发条件,可以基于方法名、注解、...
Spring提供了基于注解和XML配置的AOP实现。 接下来,CXF是一个开源服务框架,常用于构建和消费Web服务。它支持JAX-WS和JAX-RS标准,可以方便地创建SOAP和RESTful服务。在示例中,你可能会找到CXF相关的配置文件和...
现在,我们来深入探讨基于SSH框架的注解以及与Ajax和jQuery相关的知识点。 首先,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名。在SSH框架中,Spring使用注解替代XML配置,如`@Autowired`...
4. **多线程支持**:考虑到Android应用可能在不同线程中进行网络请求,框架支持异步权限请求,确保在正确线程中处理回调,避免UI线程阻塞。 5. **错误处理与日志记录**:框架内置了错误处理机制,当出现权限问题时...
本项目是一个基于Java技术栈的企业办公自动化(OA)系统,采用Spring、SpringMVC和MyBatis(SSM)框架进行开发,旨在提升企业的日常办公效率和管理水平。SSM是Java Web开发中广泛使用的三大组件,它们各自负责不同的...
综上所述,这个登录代码示例涵盖了Java Web开发中的多个关键知识点,包括框架集成、异步处理以及安全性措施,对于学习和理解Web应用开发具有很高的价值。通过深入研究这个项目,开发者可以提升自己的技能,更好地...
首先,Spring Boot简化了Spring框架的配置和初始化,使得开发者可以快速搭建一个完整的Web应用。它内置了Tomcat服务器,并提供了自动配置功能,能够根据项目依赖自动配置相应的Bean。 1. **Spring AOP基础**: AOP...
首先,Spring Boot作为Spring框架的延伸,它简化了传统Spring应用的初始化和配置过程,通过自动配置和“开箱即用”的特性,使得开发者可以快速搭建项目结构,专注于业务逻辑。在电影管理系统中,Spring Boot扮演着...
1. **Spring框架**:Spring是Java企业级应用的基石,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得开发者可以更轻松地管理对象和处理事务。在SSM中,Spring作为基础架构层,负责管理所有组件,包括...
通过AOP,可以在这些方法执行前后收集日志信息,并异步保存到数据库或其他持久化存储中,以提高系统性能。 6. **TestAop.java**:这可能是测试AOP切面逻辑的类,通过编写测试用例,确保切面的正确性和有效性。 7. ...
Spring是Java领域的一个全功能框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,使得应用的组件化和解耦变得更为简单。Struts是MVC(模型-视图-控制器)架构的一种实现,负责处理HTTP请求,协调各层...
该压缩包文件“基于java的-183-ssm基于SSM的个性化商铺系统--LW-源码.zip”包含了一个使用Java编程语言开发的SSM(Spring、SpringMVC、MyBatis)框架的个性化商铺系统。SSM是Java Web开发中常见的三层架构模式,它将...
**Mybatis**是一个优秀的持久层框架,它简化了数据库操作,通过XML或注解方式配置SQL和映射结果,实现了SQL语句与Java代码的分离。Mybatis与Spring的集成使得事务管理更加便捷,同时提供了一种灵活的动态SQL机制,...
3. 借阅管理:记录用户的借阅历史,处理借书、还书流程,同时支持逾期提醒等功能,这部分涉及到复杂的业务逻辑,Spring的DI和AOP可以帮助简化代码结构。 4. 馆藏管理:跟踪图书库存,处理图书采购和注销,可能需要...
首先,Spring框架作为基础,它提供依赖注入(DI)和面向切面编程(AOP)功能,使得代码更加模块化和可测试。DI允许开发者在运行时动态地将对象和服务装配到一起,而AOP则用于实现如日志记录、事务管理等横切关注点。...
Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"基于SSM框架的旅游从业人员管理系统"中,这三个框架协同工作,为系统...
Spring作为一个全面的开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得代码更加模块化和易于维护。SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的前端控制器,简化了HTTP请求的...
标题中的“基于SSM的农业信息化服务平台 Javaee项目 ssm项目”表明这是一个使用Spring、SpringMVC和MyBatis(SSM)框架开发的JavaEE应用程序,旨在为农业领域提供信息化服务。SSM是Java Web开发中常用的三大框架集成...