首页 > 其他分享 >基于注解的AOP

基于注解的AOP

时间:2023-02-27 18:33:06浏览次数:34  
标签:基于 int res System AOP println 注解 public out

1、引入依赖

    <!--spring aop依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>6.0.2</version>
    </dependency>
    <!--spring aspects依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>6.0.2</version>
    </dependency>

2、定义接口和实现类

public interface Calculator {
    int add(int a,int b);
    int sub(int a,int b);
    int mul(int a,int b);
    int div(int a,int b);
}
public class CalculatorImpl implements Calculator{
    @Override
    public int add(int a, int b) {
        int  res = a+b;
        System.out.println("res:"+res);
        return res;
    }

    @Override
    public int sub(int a, int b) {
        int  res = a-b;
        System.out.println("res:"+res);
        return res;
    }

    @Override
    public int mul(int a, int b) {
        int  res = a*b;
        System.out.println("res:"+res);
        return res;
    }

    @Override
    public int div(int a, int b) {
        int  res = a/b;
        System.out.println("res:"+res);
        return res;
    }
}

 

3、配置类

@Configuration
@ComponentScan(value = "com.jixian")
@EnableAspectJAutoProxy
public class SpringConfig {
}

4、切面类

@Aspect
@Component
public class AspectLog {

    @Before(value = "execution(public int com.jixian.CalculatorImpl.*(..))")
    public void beforeMethod(){
        System.out.println("前置通知...");
    }
    @After(value = "execution(* com.jixian.CalculatorImpl.*(..))")
    public void afterMethod(){
        System.out.println("后置通知...");
    }
    @AfterReturning(value = "execution(* com.jixian.CalculatorImpl.*(..))")
    public void afterReturn(){
        System.out.println("返回通知...");
    }
    @AfterThrowing(value = "execution(* com.jixian.CalculatorImpl.*(..))")
    public void throwMethod(){
        System.out.println("异常通知...");
    }
    @Around(value = "execution(* com.jixian.CalculatorImpl.*(..))")
    public Object aroundMethod(ProceedingJoinPoint joinPoint){
        Object o = null;
        try {
            System.out.println("环绕通知...方法执行前");
             o = joinPoint.proceed();
            System.out.println("环绕通知...返回值后");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            System.out.println("环绕通知...出现异常");
        } finally {
            System.out.println("环绕通知...方法执行后");
        }
        return o;
    }
}

5、测试

        ApplicationContext context = new AnnotationConfigApplicationContext("com.jixian");
        Calculator calculator = context.getBean(Calculator.class);
        calculator.div(12,1);

 

标签:基于,int,res,System,AOP,println,注解,public,out
From: https://www.cnblogs.com/jixian/p/17161439.html

相关文章

  • @Valid 注解类型参数校验
    <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>@Valid注解......
  • spring aop切面说明
    execution:处理JoinPoint的类型,例如call、execution(*android.app.Activity.on**(..)):这个是最重要的表达式,第一个*表示返回值,*表示返回值为任意类型,后面这个就是典型的......
  • springboot条件注册Condition注解
    环境识别importorg.springframework.context.annotation.Condition;importorg.springframework.context.annotation.ConditionContext;importorg.springframework.c......
  • 基于SpringBoot WebMagic爬虫爬取大乐透双色球
    大乐透网页地址:https://kjh.55128.cn/dlt-history-360.htm双色球网页地址:https://kjh.55128.cn/ssq-history-120.htm 注:程序仅用于个人兴趣爱好,不得用于商业行为,本......
  • java新增注解映射字段
    1.注解样例:新建注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public@interfaceMyName{publicStringvalue()default"";}Retenti......
  • 如何实现基于Cortex-A9 的UART裸机驱动
    前言Uart在一个嵌入式系统中是一个非常重要的模块,他承担了CPU与用户交互的桥梁。用户输入信息给程序、CPU要打印一些信息给终端都要依赖UART。本文将以Exynos4412的UART......
  • Spring依赖注入,该放弃@Autowired注解了
    最近在IDEA中用@Autowired注解时,发现IDEA不推荐使用这个注解了。原因是Spring官方不再推荐这种依赖注入的方式。具体原因不再详细说明。目前,Spring官方推荐的注入方式是......
  • 基于jeecgboot的flowable流程并行审批的bug修复
        对于下面的并行流程,会出现流程错误,特别是下面角色的处理与一个任务节点多个用户处理问题,所以需要进行修复bug。   1、后端处理   设置下一个审批人......
  • 基于jeecgboot的支持online表单审批的功能正式发布
       基于jeecgboot的flowable流程支持online表单审批线上发布一个完整的版本,利用原有online表单功能,通过选择现有online表单数据进行审批申请与操作,基本支持各自表单包......
  • 基于jeecgboot的flowable增加我的抄送及已读信息
       这部分功能由网友Tom-猫提供 1、增加两个字段: 接收人姓名与查看状态 2、前面在manage的api里增加下面接口,不过名字以后修改一下,好像不规范//抄送人已读状态e......