`

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面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    前置后置环绕异常通知

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改源代码的情况下,向代码中插入额外的功能。AOP的核心概念是切面,它结合了业务逻辑关注点与横切关注点,如日志、事务管理等。本教程将...

    Spring面向切面编程AOP

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要特性,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、安全控制等。AOP的核心概念包括切面、通知、连接...

    AOP面向切面编程总结

    ### AOP面向切面编程详解 #### 一、AOP概览 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,它作为OOP(面向对象编程)的一种补充,主要解决了OOP在处理横切关注点方面的不足。在传统的...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    spring aop 自定义切面示例

    在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...

    AOP_使用spring框架进行面向切面编程

    Spring支持五种类型的通知:前置通知(Before)、后置通知(After)、返回后通知(After Returning)、异常后通知(After Throwing)和环绕通知(Around)。 3. **连接点(Join Point)**:连接点是程序执行的特...

    spring4 AOP 面向切面编程@Aspect

    Spring支持五种不同类型的通知:`@Before`(前置通知)、`@After`(后置通知)、`@AfterReturning`(返回后通知)、`@AfterThrowing`(异常后通知)和`@Around`(环绕通知)。每种通知都在不同的连接点执行,提供...

    spring的Aop中的前置通知,后置通知以及环绕通知简单代码

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限检查等,这些关注点可以被模块化为独立的组件,然后在程序的不同部分透明地插入。在Spring AOP中,有三...

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

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

    Spring-AOP(前置/后置/环绕)通知的例子

    Spring AOP,全称Aspect-Oriented Programming,是Spring框架中的一个重要组成部分,它引入了面向切面编程的概念,使得开发者可以方便地实现横切关注点,如日志、事务管理等,而无需侵入到业务代码中。在这个例子中...

    AOP面向切面编程的JavaScript实现

    这些库提供了一套API,用于定义切面、通知(advises,如前置通知、后置通知、环绕通知等)和连接点(join points)。这些库可以帮助开发者更容易地管理和维护面向切面的代码。 4. **切点(Pointcuts)**: 切点是...

    面向切面 aop

    通知类型有前置通知、后置通知、环绕通知、异常通知和最终通知等。 4. **切点(Pointcut)**:定义一组连接点的规范,用于匹配并确定通知的执行时机。切点可以基于方法签名、注解等进行定义。 5. **引入...

    SpringAop面向切片

    **Spring AOP 面向切面编程详解** 在Java世界中,Spring框架以其强大的功能和易用性闻名,其中一个核心特性就是面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是为了解决传统面向对象编程中横切关注点...

    16.2 Spring框架-AOP面向切面编程

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架中的一个重要组成部分,它提供了一种模块化和声明式的方式来处理程序中的横切关注点,如日志、事务管理、性能监控等。在传统的OOP(面向对象编程)中...

    Spring AOP切面编程简介

    **Spring AOP切面编程简介** 在Java世界中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许我们分离关注点,将横切关注点(如日志、事务管理、性能监控等)与业务逻辑代码解耦。...

    spring-aop面向切面系统日志案例

    在IT行业中,Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的核心特性之一,它使得我们能够以一种声明式的方式处理系统中的横切关注点,如日志记录、事务管理、性能监控等。这个“spring-...

    spring使用动态代理面向切面编程(AOP) xml

    在Spring框架中,面向切面编程(AOP)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨如何使用Spring的动态代理机制实现AOP...

    AOP面向切面编程.docx

    - **通知(Advice)**:通知定义了切面在特定连接点上应该执行的代码,根据执行时机分为前置通知、后置通知、环绕通知、异常通知和最终通知。 **AspectJ**是AOP的一种实现,提供了强大的元数据支持,可以通过注解或...

    SpringBoot之AOP面向切面编程实例.rar

    而AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者定义“切面”,这些切面可以封装系统中的交叉关注点,如日志、事务管理等,使得代码更加模块化和可维护。本实例将深入...

Global site tag (gtag.js) - Google Analytics