spring aop的一个例子。

@Component

@Aspect

public class TestAop {

@Pointcut("execution(* com.chinadovey.parking.webapps.api.*.*(..))")  //第一个* 不懂。第二个*代表类。第三个*代表方法名称。

    private void pointCutMethod(){   }   // aop的原理是代理(代理大概是基于反射),这里是指出代理哪个方法。


    //声明前置通知

    @Before("pointCutMethod()") 

    public void doBefore() { 

        System.out.println("前置通知");// 

    } 


    //声明后置通知 

    @AfterReturning(pointcut = "pointCutMethod()", returning = "result") 

    public void doAfterReturning(String result) { 

        System.out.println("后置通知");

        System.out.println("---" + result + "---");

    } 


    //声明例外通知 

    @AfterThrowing(pointcut = "pointCutMethod()", throwing = "e") 

    public void doAfterThrowing(Exception e) { 

        System.out.println("例外通知");

        System.out.println(e.getMessage());

    } 


    //声明最终通知 

    @After("pointCutMethod()") 

    public void doAfter() { 

        System.out.println("最终通知");//

    } 


    //声明环绕通知 

    @Around("pointCutMethod()") 

    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { 

        System.out.println("进入方法---环绕通知");//

        JSONObject json = new JSONObject();

        String methodName = joinPoint.getSignature().getName();//拿到执行的方法名称。不是URI

        if(methodName.equals("getSynInfos")){

             json = (JSONObject)joinPoint.proceed(); //拿到返回值。是代理执行该方法。json是方法的返回值。

            System.out.println("json:"+json);

            boolean result = (Boolean) json.get("result");

            if(result == true){

                    //发消息给用户。

                    System.out.println("车位锁控制成功。");

            }

        }

        System.out.println("退出方法---环绕通知");// 

        return json; 

    } 

}

xml文件中需要配置 aop自动代理

你可能感兴趣的:(spring aop的一个例子。)