100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > spring --(16)AOP前置通知与后置通知

spring --(16)AOP前置通知与后置通知

时间:2022-03-28 07:56:30

相关推荐

spring --(16)AOP前置通知与后置通知

独角兽企业重金招聘Python工程师标准>>>

AspectJ是目前最流行的AOP框架。

本例采用注解的方式实现前置通知,xml配置方式稍后讲解

//接口

public interface Calculator {int add(int i,int j);int sub(int i,int j);}

//接口实现类

@Componentpublic class CalculatorImpl implements Calculator{@Overridepublic int add(int i, int j) {int result = i+j;return result;}@Overridepublic int sub(int i, int j) {int result = i-j;return result;}}

//切面类

package com.test.aop.impl;import java.util.Arrays;import java.util.List;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.ponent;/*** 切面类* 1.需要将该类放入到IOC容器中* 2.再将它申明为一个切面*/@Aspect@Componentpublic class LoggingAspect {//声明该方法是一个前置通知//在如下方法开始执行之前执行@Before("execution(public int com.test.aop.impl.CalculatorImpl.add(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 + "begin"+args);}//后置通知//目标方法执行之后(无论是否发生异常),执行的通知@After("execution(* com.test.aop.impl.CalculatorImpl.*(int,int))")public void afterMethod(JoinPoint joinPoint) {//获取方法名String methodName = joinPoint.getSignature().getName();System.out.println("The method" + methodName + "end");}}

//main方法

public class Main {@SuppressWarnings("resource")public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");Calculator calculator = ctx.getBean(Calculator.class);int result = calculator.add(1, 2);System.out.println(result);}}

//xml配置文件

<!-- 自动扫描包 --><context:component-scan base-package="com.test.aop.impl"></context:component-scan><!-- 使AspectJ注解起作用,为匹配的类生成代理对象 --><aop:aspectj-autoproxy></aop:aspectj-autoproxy>

//输出结果

The methodaddbegin[1, 2]The methodaddend3

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。