赞
踩
1.后置通知是在连接点完成之后执行的,即连接点返回结果或者抛出异常的时候,下面的后置通知记录了方法的终止
2.一个切面可以包括一个或者多个通知
1.后置通知方法
- package com.dhx.spring.aop.impl;
-
- import java.util.Arrays;
- import java.util.List;
-
- import org.aspectj.lang.JoinPoint;
- import org.aspectj.lang.annotation.After;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
- import org.springframework.stereotype.Component;
-
- //把这个类声明为一个切面:需要把该类放到IOC容器中,再声明为一个切面
- @Aspect
- @Component
- public class LoggingAspect {
-
- //声明该方法是一个前置通知:在目标方法开始之前执行,其中*为具体的某个方法名,也可以指全部的方法名
- @Before("execution(public int com.dhx.spring.aop.impl.ArtithmeticCalculatorImpl.*(int, int))")
- public void beforeMethod(JoinPoint joinPoint) {
- //方法名
- String methodName=joinPoint.getSignature().getName();
- //参数
- List<Object> args=Arrays.asList(joinPoint.getArgs());
- System.out.println("the method "+methodName+" begins with "+args);
- }
-
- //后置通知:在目标方法执行后(无论是否发生异常),执行的通知
- //在后置通知中还不能访问目标方法执行的结果
- @After("execution(public int com.dhx.spring.aop.impl.ArtithmeticCalculatorImpl.*(int, int))")
- public void afterMethod(JoinPoint joinPoint) {
- //方法名
- String methodName=joinPoint.getSignature().getName();
- System.out.println("the method "+methodName+" ends");
- }
-
- }
2.测试
- package com.dhx.spring.aop.impl;
-
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
- public class Main {
-
- public static void main(String[] args) {
- //1.创建spring 的IOC容器
- ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
- //2.从IOC容器中获取Bean的实例
- ArtithmeticCalculator artithmeticCalculator=ctx.getBean(ArtithmeticCalculator.class);
- //3.使用Bean
- int result=artithmeticCalculator.add(3, 6);
- System.out.println("result: "+result);
-
- result=artithmeticCalculator.div(12, 6);
- System.out.println("result: "+result);
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。