标签:exec oid top asp 数列 信息 ret eth name
AOP : 【动态代理】指程序运行期间动态的将某段代码切入到制定方法位置进行运行的编程方式。
导入spring-aspects依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.12.RELEASE</version> </dependency>
public class MathCalculator { public int div(int i, int j) { System.out.println("MathCalculator div 运行..."); return i / j; } }
切面类LogAspects
@Aspect // 告诉SPRING 当前类是一个切面类 public class LogAspects { @Pointcut("execution(public int com.hw.springannotation.aop.MathCalculator.*(..))") public void pointCut() { } @Before("pointCut()") public void logStart(JoinPoint joinPoint) { String methodName = joinPoint.getSignature().getName(); //方法名 Object[] args = joinPoint.getArgs(); //参数列表 System.out.println(methodName + "运行,参数列表是:{" + Arrays.asList(args) + "}"); } @After("pointCut()") public void logEnd(JoinPoint joinPoint) { System.out.println(joinPoint.getSignature().getName() + "除法结束。。。"); } @AfterReturning(value = "pointCut()", returning = "result") public void logReturn(JoinPoint joinPoint, Object result) { System.out.println(joinPoint.getSignature().getName() + "除法正常返回,运行结果是:" + result); } @AfterThrowing(value = "pointCut()", throwing = "exception") public void logException(JoinPoint joinPoint, Exception exception) { System.out.println(joinPoint.getSignature().getName() + "除法运行异常,异常信息:" + exception.getMessage()); } }
@Configuration @EnableAspectJAutoProxy public class MainConfigOfAop { // 业务逻辑类加入到容器中 @Bean public MathCalculator mathCalculator() { return new MathCalculator(); } // 切面类 也加入到容器中 @Bean public LogAspects logAspects() { return new LogAspects(); } }
测试用例
@Test public void test() { // 不要自己创建对象 // MathCalculator calculator = new MathCalculator(); // calculator.div(1, 1); // 从容器中获取 MathCalculator mathCalculator = applicationContext.getBean(MathCalculator.class); mathCalculator.div(1, 0); applicationContext.close(); }
运行:
总结:
1.@EnableAspectJAutoProxy开启注解
2.@Aspect声明切面,写在类上
3.@PonitCut写切入点
4.@Before、@After写前、后、环绕等通知
5.JoinPoint只能放在第一个参数
标签:exec oid top asp 数列 信息 ret eth name
原文地址:https://www.cnblogs.com/lyh233/p/12455065.html