使用注解配置 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;
    }
}
好好学习,天天向上。 努力工作,给自己的和家人一个满意的答案。。。。
原文地址:https://www.cnblogs.com/axu521/p/10144626.html