`
iamzhongyong
  • 浏览: 805393 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于AOP和注解简化异步化处理

    博客分类:
  • java
 
阅读更多

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 

 

0
8
分享到:
评论
1 楼 mazzystar 2013-08-16  
感觉 result.get();时会阻塞当前线程吧? 确定这种方式比直接调用耗时短吗 ?

相关推荐

    AutoLoadCache是基于AOPAnnotation等技术实现的高效的缓存管理解决方案

    总结,AutoLoadCache是一个强大的缓存管理解决方案,通过AOP和注解实现了缓存与业务逻辑的解耦,同时提供了异步刷新和“拿来主义机制”来提升高并发环境下的性能。它为Java开发者提供了一种简单、高效的方式来管理和...

    EJB+Annotation实现AOP的DEMO

    EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要用于构建可复用...通过注解的使用,可以简化配置,增强代码的表达力,使得在大型企业级项目中,EJB和AOP的结合成为了一种高效且强大的开发模式。

    spring-aop.jar

    Spring AOP提供了多种通知实现,如`org.springframework.aop.interceptor.AbstractAsyncTimingInterceptor`用于异步方法的性能监控。 4. **切点(Pointcut)**:切点定义了通知的触发条件,可以基于方法名、注解、...

    Spring AOP、IOC、cxf、任务调度所需jar包以及配置文件

    Spring提供了基于注解和XML配置的AOP实现。 接下来,CXF是一个开源服务框架,常用于构建和消费Web服务。它支持JAX-WS和JAX-RS标准,可以方便地创建SOAP和RESTful服务。在示例中,你可能会找到CXF相关的配置文件和...

    基于ssh框架的注解

    现在,我们来深入探讨基于SSH框架的注解以及与Ajax和jQuery相关的知识点。 首先,Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)能力而闻名。在SSH框架中,Spring使用注解替代XML配置,如`@Autowired`...

    Android-一个使用AOP思想的Android动态请求框架

    4. **多线程支持**:考虑到Android应用可能在不同线程中进行网络请求,框架支持异步权限请求,确保在正确线程中处理回调,避免UI线程阻塞。 5. **错误处理与日志记录**:框架内置了错误处理机制,当出现权限问题时...

    Java项目-基于SSM的企业办公自动化系统.zip

    本项目是一个基于Java技术栈的企业办公自动化(OA)系统,采用Spring、SpringMVC和MyBatis(SSM)框架进行开发,旨在提升企业的日常办公效率和管理水平。SSM是Java Web开发中广泛使用的三大组件,它们各自负责不同的...

    登录的完整代码涉及3个框架 和异步请求

    综上所述,这个登录代码示例涵盖了Java Web开发中的多个关键知识点,包括框架集成、异步处理以及安全性措施,对于学习和理解Web应用开发具有很高的价值。通过深入研究这个项目,开发者可以提升自己的技能,更好地...

    SpringBoot+AOP日志服务

    首先,Spring Boot简化了Spring框架的配置和初始化,使得开发者可以快速搭建一个完整的Web应用。它内置了Tomcat服务器,并提供了自动配置功能,能够根据项目依赖自动配置相应的Bean。 1. **Spring AOP基础**: AOP...

    基于SpringBoot电影管理系统

    首先,Spring Boot作为Spring框架的延伸,它简化了传统Spring应用的初始化和配置过程,通过自动配置和“开箱即用”的特性,使得开发者可以快速搭建项目结构,专注于业务逻辑。在电影管理系统中,Spring Boot扮演着...

    ssm datagrid异步增删改查实现

    1. **Spring框架**:Spring是Java企业级应用的基石,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得开发者可以更轻松地管理对象和处理事务。在SSM中,Spring作为基础架构层,负责管理所有组件,包括...

    Stringboot AOPdemo,执行controller中方法.zip

    通过AOP,可以在这些方法执行前后收集日志信息,并异步保存到数据库或其他持久化存储中,以提高系统性能。 6. **TestAop.java**:这可能是测试AOP切面逻辑的类,通过编写测试用例,确保切面的正确性和有效性。 7. ...

    JSP基于SSM企业个性化资讯交流平台网站.zip

    Spring是Java领域的一个全功能框架,它提供了依赖注入、AOP(面向切面编程)、事务管理等功能,使得应用的组件化和解耦变得更为简单。Struts是MVC(模型-视图-控制器)架构的一种实现,负责处理HTTP请求,协调各层...

    基于java的-183-ssm基于SSM的个性化商铺系统--LW-源码.zip

    该压缩包文件“基于java的-183-ssm基于SSM的个性化商铺系统--LW-源码.zip”包含了一个使用Java编程语言开发的SSM(Spring、SpringMVC、MyBatis)框架的个性化商铺系统。SSM是Java Web开发中常见的三层架构模式,它将...

    网上商城,基于SpringMVC、Spring和Mybatis框架

    **Mybatis**是一个优秀的持久层框架,它简化了数据库操作,通过XML或注解方式配置SQL和映射结果,实现了SQL语句与Java代码的分离。Mybatis与Spring的集成使得事务管理更加便捷,同时提供了一种灵活的动态SQL机制,...

    基于Spring,MyBatis 的图书管理系统

    3. 借阅管理:记录用户的借阅历史,处理借书、还书流程,同时支持逾期提醒等功能,这部分涉及到复杂的业务逻辑,Spring的DI和AOP可以帮助简化代码结构。 4. 馆藏管理:跟踪图书库存,处理图书采购和注销,可能需要...

    基于SSM的电商平台

    首先,Spring框架作为基础,它提供依赖注入(DI)和面向切面编程(AOP)功能,使得代码更加模块化和可测试。DI允许开发者在运行时动态地将对象和服务装配到一起,而AOP则用于实现如日志记录、事务管理等横切关注点。...

    基于SSM框架的旅游从业人员管理系统

    Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在"基于SSM框架的旅游从业人员管理系统"中,这三个框架协同工作,为系统...

    基于Spring+SprigMVC+mybatis的服装商城项目

    Spring作为一个全面的开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得代码更加模块化和易于维护。SpringMVC是Spring框架的一部分,专门用于构建Web应用程序的前端控制器,简化了HTTP请求的...

    基于SSM的农业信息化服务平台 Javaee项目 ssm项目

    标题中的“基于SSM的农业信息化服务平台 Javaee项目 ssm项目”表明这是一个使用Spring、SpringMVC和MyBatis(SSM)框架开发的JavaEE应用程序,旨在为农业领域提供信息化服务。SSM是Java Web开发中常用的三大框架集成...

Global site tag (gtag.js) - Google Analytics