zoukankan      html  css  js  c++  java
  • spring学习笔记——面向切面编程AOP三

    前面介绍了aop的xml的简单配置和使用,下面介绍一下aop的注解使用方式的例子,可以对照第二篇的

    pom文件是相同的;

    spring.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
        <aop:aspectj-autoproxy />
        <bean id = "audience" class="spring.study.spring.aop.Audience" />
        <bean id = "player" class = "spring.study.spring.aop.Player" />
        <bean id = "audienceAnnotation" class = "spring.study.spring.aop.AudienceByAnnotation" />
        
    </beans>

    java类:AudienceByAnnotation类中的song()方法只是一个标识,供@pointcut注解依附,它里面的内容并不重要

    package spring.study.spring.aop;
    
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    
    @Aspect
    public class AudienceByAnnotation {
    
        @Pointcut("execution(* spring.study.spring.aop.Player.song(..))")
        public void song(){}
        
        @Before("song()")
        public void taskSeats(){
            System.out.println("the audience is taking their seats annotation");
        }
        
        @Before("song()")
        public void turnOffCellPhones(){
            System.out.println("the audience is turning off their cellphones annotation");
        }
        
        @AfterReturning("song()")
        public void applaud(){
            System.out.println("clap clap clap annotation");
        }
        
        @AfterThrowing("song()")
        public void demandRefund(){
            System.out.println("boo! we want our money back! annotation");
        }
    }
    package spring.study.spring.aop;
    
    public class Player {
    
        public void song(){
            System.out.println("la la la la la la");
        }
    }
    package spring.study.spring.aop;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
            ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
            Player p = (Player)ctx.getBean("player");
            p.song();
        }
    }

    输出:

    the audience is taking their seats annotation
    the audience is turning off their cellphones annotation
    la la la la la la
    clap clap clap annotation

    (aop中还有一个叫环绕的,使用方式不管在xml配置还是注解方式都差不多,这里就不做介绍了)

  • 相关阅读:
    Linux基础命令---chfn
    第二十一课:js属性操作的兼容性问题
    jquery源码解析:jQuery工具方法Callbacks详解
    第二十课:js中如何操作元素的属性系统
    第十七课:js数据缓存系统的原理
    jquery源码解析:proxy,access,swap,isArraylike详解
    第十九课:盒子模型
    jquery源码解析:each,makeArray,merge,grep,map详解
    第十八课:js样式操作需要注意的问题
    下拉框插件的详解
  • 原文地址:https://www.cnblogs.com/tiramisuyj/p/4746382.html
Copyright © 2011-2022 走看看