• 使用注解配置 AOP


    一、使用注解(基于Aspect)

      1、spring不会自动去寻找注解,必须告诉spring那个包下的类有注解

        1.1 先引入xmlns:context命名空间

    <context:component-scan base-package="com.bjsxt.advice"></context:component-scan>

       2、@Component

        2.1 相当于<bean/>

        2.2 如果没有参数,把类名首字母变小写,相当于<bean id=" "/>

        2.3 也可以 @Component(" 自定义名称 ")

       3、实现步骤:

        3.1、在spring配置文件中设置注解在哪些包中

    <context:component-scan base-package="com.bjsxt.advice,com.bjsxt.test"></context:component-scan>

        3.2、在Demo类中添加 @Componet

          3.2.1 在方法上添加 @Pointcut("  ") 定义切点

    @Component
    public class Demo {
        @Pointcut("execution(* com.bjsxt.test.Demo.demo1())")
        public void demo1(){
            System.out.println("demo1");
        }
    }

        3.3、在通知类中配置

          3.3.1 @Component 类被spring管理

          3.3.2 @Aspect 相当于<aop:aspect/> 表示通知方法在当前类中

    @Component
    @Aspect
    public class Advice {
        @Before("com.bjsxt.test.Demo.demo1()")
        public void mybefore(){
            System.out.println("前置通知111");
        }
        @After("com.bjsxt.test.Demo.demo1()")
        public void myafter(){
            System.out.println("后置通知2222");
        }
        @AfterThrowing("com.bjsxt.test.Demo.demo1()")
        public void mythrow(){
            System.out.println("异常通知3333");
        }
        @Around("com.bjsxt.test.Demo.demo1()")
        public Object myarround(ProceedingJoinPoint p) throws Throwable{
            System.out.println("环绕前置");
            Object result = p.proceed();
            System.out.println("环绕后置");
            return result;
        }
    }
    好好学习,天天向上。 努力工作,给自己的和家人一个满意的答案。。。。
  • 相关阅读:
    PHP的GD库
    PHP正则表达式
    Redis学习笔记
    C++的vector对象
    Python的with用法理解
    python 类属性与方法
    python lambda表达式
    Python3的decode()与encode()
    PHP的魔法方法__set() __get()
    MySQL的基本知识 -- 函数
  • 原文地址:https://www.cnblogs.com/axu521/p/10144626.html
Copyright © 2020-2023  润新知