`

Spring AOP 面向切面编程 常见通知实现(前置,后置,环绕,异常)

阅读更多

概述:在spring加载时,定义先后执行的方法,以及环绕异常等方法

 

观众类Audience~~

    package com.jCuckoo.demo;  
      
    import org.aspectj.lang.ProceedingJoinPoint;  
      
    public class Audience {  
        public void takeSeats() {  
            System.out.println("----开演之前,请占座----");  
        }  
      
        public void turnOffCellPhones() {  
            System.out.println("----开始之前,请关机----");  
        }  
      
        public void applaud() {  
            System.out.println("****鼓掌,继续鼓掌。****");  
        }  
        public void turnOnCellPhones() {  
            System.out.println("****演出结束,可以开机****");  
        }  
      
        public void demandRefund() {  
            System.out.println("
    太熊了,退我票钱
    ");  
        }  
      
        public void watchPerformance(ProceedingJoinPoint joinpoint) {  
            try {  
                System.out.println("oooooooo环绕通知开始oooooooo");  
                long start = System.currentTimeMillis();  
                joinpoint.proceed();  
                long end = System.currentTimeMillis();  
                System.out.println("oooooooo环绕通知结束oooooooo");  
                System.out.println("演出耗时共计:" + (end - start)  
                        + "毫秒。");  
            } catch (Throwable t) {  
                System.out.println("Boo!Wewantourmoneyback!");  
            }  
        }  
    }  

 表演接口Performer

    package com.jCuckoo.demo;  
      
    public interface Performer {  
        void perform()throws Exception;  
    }  

 定义魔术师Juggler,实现表演接口

    package com.jCuckoo.demo;  
      
    public class Juggler implements Performer {  
        private int beanBags = 3;  
      
        public Juggler() {  
        }  
      
        public Juggler(int beanBags) {  
            this.beanBags = beanBags;  
        }  
      
        public void perform() throws Exception {  
            System.out.println("表演开始:魔术师欺骗了" + beanBags + "个游戏豆。");  
        }  
    }  

spring的配置文档applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation="  
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
    http://www.springframework.org/schema/aop  
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
        <bean id="juggler" class="com.jCuckoo.demo.Juggler"/>  
        <bean id="audience" class="com.jCuckoo.demo.Audience" />  
        <aop:config>  
            <aop:aspect ref="audience">  
                <aop:pointcut id="performance"  
                    expression="execution(* com.jCuckoo.demo.Performer.perform(..))" />  
                <aop:before pointcut-ref="performance" method="takeSeats" />  
                <aop:before pointcut-ref="performance" method="turnOffCellPhones" />  
                <aop:after pointcut-ref="performance" method="turnOnCellPhones" />  
                <aop:after-returning pointcut-ref="performance"  
                    method="applaud" />  
                <aop:after-throwing pointcut-ref="performance"  
                    method="demandRefund" />  
                <aop:around pointcut-ref="performance" method="watchPerformance"/>  
            </aop:aspect>  
        </aop:config>  
    </beans>  

 测试类,获取魔术师,并进行表演。

    package com.jCuckoo.test;  
      
    import org.springframework.context.ApplicationContext;  
    import org.springframework.context.support.ClassPathXmlApplicationContext;  
      
    import com.jCuckoo.demo.Performer;  
      
    public class MainTest {  
      
        /** 
         * @param args 
         */  
        public static void main(String[] args) {  
            ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");  
            Performer performer=(Performer)ctx.getBean("juggler");  
            try {  
                performer.perform();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
      
        }  
      
    }  

最终结果:----开演之前,请占座----
----开始之前,请关机----
oooooooo环绕通知开始oooooooo
表演开始:魔术师欺骗了3个游戏豆。
****演出结束,可以开机****
****鼓掌,继续鼓掌。****
oooooooo环绕通知结束oooooooo
演出耗时共计:1毫秒。

 

作者原文出处:http://blog.csdn.net/guoquanyou/article/details/6754916

分享到:
评论

相关推荐

    Spring AOP运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。

    1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景

    Spring 4.0 AOP 面向切面Maven测试程序

    Spring 4.0 AOP 面向切面测试程序,涉及通知类型包括前置通知\后置通知\返回通知\异常通知\环绕通知,项目采用Maven搭建!

    深入解析Spring AOP源码:从原理到实现,全方位掌握Java AOP编程精髓

    Spring AOP支持不同类型的通知,如前置通知(Before)、后置通知(After)、返回后通知(After-returning)、抛出异常后通知(After-throwing)和环绕通知(Around)。这种机制使得开发者可以在运行时动态地应用这些...

    Spring Aop的简单实现

    一个基于配置文件的Spring AOP的实现。实现了前置通知,后置通知,以及拦截器的功能,配置中有详细的注释。

    最简单的基于注解进行面向切面AOP开发案例

    本项目是提供给java新手学习使用的。 本项目演示了java的 AOP 面向切面...本项目演示了 前置切面,环绕切面, 后置异常切面 的开发。 本项目的技术栈是 Maven+Spring 如果您是技术高手,请不要购买,这个资源不适合您。

    spring AOP代理机制.docx

    sping AOP面向切面的编程,程序运行过程中动态加入所需代码等,对公共的问题进行集中处理,具体的实现有动态代理与静态代理,本文通过对AOP的代理机制,前置、后置、环绕、异常的通知进行了综合总结和运用!

    Javascript aop(面向切面编程)之around(环绕)分析

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知)、after(后置通知)、around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点。但是利用aop...

    springboot-aop

    springboot配置AOP切面:前置通知、后置通知、环绕通知、返回通知、异常通知

    微服务之SpringBoot2—降低开发复杂度之面向切面AOP.zip

    1、前置通知案例测试 2、后置返回通知案例测试 3、后置异常通知案例测试 4、后置最终通知案例测试 5、环绕通知案例测试

    Spring AOP @Aspect 基本用法

    1、@Aspect放在类头上,把这个类作为一个切面。 2、 @Pointcut放在方法头上,定义一个可被别的方法引用的切入点表达式。 3、5种通知。 3.1、@Before,前置通知,放在方法头上。 3.2、@After,后置【finally】...

    spring代码课堂笔记

    Spring AOP 通知种类:设置次要业务与(被监听方法)绑定执行顺序问题 1.前置通知: 1)切面:次要业务方法 2) 执行切入点:被拦截的主要业务方法 2.后置通知: 1)执行切入点:被拦截的主要业务方法 2)切...

    尚硅谷佟刚Spring4代码及PPT.rar

    Bean、通过 FactoryBean 配置 Bean、通过注解配置 Bean、泛型依赖注入、AOP 基础、前置通知、后置通知、返回通知、异常通知、环绕通知、切面的优先级、切点表达式、使用 XML 文件的方式配置 AOP、使用 JdbcTemplate ...

    Spring AOP demo

    -- 配置切面的bean --&gt; &lt;bean id="loggingAspect" class="com.jas.aop.xml.LoggingAspect"/&gt; &lt;aop:config&gt; &lt;!-- 配置切点表达式 --&gt; &lt;aop:pointcut id="pointcut1" expression="execution(public ...

    Spring.html

    概念:面向切面编程,在不改变源码的情况下对方法进行增强,抽取横切关注点(日志处理,事务管理,安全检查,性能测试等等),使用AOP进行增强,使程序员只需要关注与业务逻辑编写. 专业术语 目标Target:需要增强的类 ...

    JavaScript中AOP的实现与应用

    AOP (Aspect Oriented Programming) ,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生,利用AOP可以对业务逻辑的各个部分进行隔离...

    Spring-Reference_zh_CN(Spring中文参考手册)

    6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明一个切面 6.2.3. 声明一个切入点...

    spring-boot示例项目

    该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    spring in action英文版

     3.1.2 Spring的AOP实现  3.2 创建通知  3.2.1 前置通知  3.2.2 后置通知  3.2.3 环绕通知  3.2.4 异常通知  3.2.5 引入通知  3.3 定义切入点  3.3.1 在Spring中定义切入点  3.3.2 ...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

Global site tag (gtag.js) - Google Analytics