zoukankan      html  css  js  c++  java
  • 初学AOP

    srcdaydayCount.java

    package dayday;

    import org.springframework.stereotype.Component;

    /**
    * Created by I am master on 2016/12/3.
    */
    @Component
    public interface Count {
    int add(int i, int j);
    int mul(int i, int j);
    int div(int i, int j);
    int sub(int i, int j);
    }

    srcdaydayCountImpl.java

    package dayday;

    import dayday.Count;
    import org.springframework.stereotype.Component;

    /**
    * Created by I am master on 2016/12/3.
    */
    @Component
    public class CountImpl implements Count {
    public int add(int i,int j){
    int result=i+j;
    return result;
    }
    public int sub(int i,int j){
    int result=i-j;
    return result;
    }
    public int mul(int i,int j){
    int result=i*j;
    return result;
    }
    public int div(int i,int j){
    int result=i/j;
    return result;
    }
    }

    srcdaydayLogginAspect.java

    package dayday;

    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;

    import org.springframework.stereotype.Component;

    import java.util.Arrays;
    import java.util.List;

    /**
    * Created by I am master on 2016/12/3.
    */
    @Aspect
    @Component
    public class LogginAspect {
    @Before("execution(public int dayday.Count.add(int,int))")
    public void beforeMethod(JoinPoint joinpoint){
    String methodName=joinpoint.getSignature().getName();
    List<Object>args= Arrays.asList(joinpoint.getArgs());
    System.out.println("method is "+methodName+" begins with "+args);
    }
    @After("execution(public int dayday.Count.add(int,int))")
    public void afterMethod(){
    System.out.println("After...");
    }
    @AfterReturning(value="execution(public int dayday.Count.add(int,int))",returning = "result")
    public void afterReturning(JoinPoint joinpoint,Object result){
    String methodName=joinpoint.getSignature().getName();
    System.out.println("method is "+methodName+" result is "+result);
    }
    @AfterThrowing(value="execution(public int dayday.Count.div(int,int))",throwing ="exception")
    public void afterThrowing(JoinPoint joinpoint,Exception exception){
    String methodName=joinpoint.getSignature().getName();
    System.out.println("method is "+methodName+" occurs "+exception);
    }
    @Around("execution(public int dayday.Count.add(int,int))")
    public Object aroundMethod(ProceedingJoinPoint pjd){

    Object result = null;
    String methodName = pjd.getSignature().getName();

    try {
    //前置通知
    System.out.println("The method " + methodName + " begins with " + Arrays.asList(pjd.getArgs()));
    //执行目标方法
    result = pjd.proceed();
    //返回通知
    System.out.println("The method " + methodName + " ends with " + result);
    } catch (Throwable e) {
    //异常通知
    System.out.println("The method " + methodName + " occurs exception:" + e);
    throw new RuntimeException(e);
    }
    //后置通知
    System.out.println("The method " + methodName + " ends");
    return result;
    }
    }

    srcdaydayMain.java

    package dayday;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    /**
    * Created by I am master on 2016/12/3.
    */
    public class Main {
    public static void main(String[] args){
    ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    Count c = ctx.getBean(Count.class);
    int result=c.add(8,3);
    }
    }

    srceans.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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <context:component-scan base-package="dayday"/>
    <!--使AspectJ注释起作用,自动为匹配的类生成代理对象-->
    <aop:aspectj-autoproxy/>
    </beans>

    基于xml配置切面
    srcdaydayeans-xml.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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--配置Bean-->
    <bean id="countimpl" class="dayday.CountImpl"></bean>

    <!--配置切面的Bean-->
    <bean id="logginaspect" class="dayday.LogginAspect"></bean>

    <!--配置AOP-->
    <aop:config>
    <!--配置切点的bean-->
    <aop:pointcut expression="execution(* dayday.Count.*(int, int))" id="pointcut"/>
    <!-- 配置切面及通知 -->
    <aop:aspect ref="logginaspect">
    <aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before>
    <aop:after method="afterMethod" pointcut-ref="pointcut"></aop:after>
    <aop:after-returning method="afterReturning" returning="result" pointcut-ref="pointcut"></aop:after-returning>
    <aop:after-throwing method="afterThrowing" throwing="exception" pointcut-ref="pointcut"></aop:after-throwing>
    </aop:aspect>
    </aop:config>
    </beans>
     
  • 相关阅读:
    Insert Sort Singly List
    Binary Search Tree Iterator
    React的组件化
    React的虚拟DOM
    如何依靠代码提高网络性能
    读高性能JavaScript编程 第三章
    读高性能JavaScript编程 第二章 让我知道了代码为什么要这样写
    读高性能JavaScript编程 第一章
    固本培元之一:栈和堆
    学习笔记
  • 原文地址:https://www.cnblogs.com/Hdaydayup/p/6130389.html
Copyright © 2011-2022 走看看