Spring AOP实例操作 简单易懂

AOP的功能,不改变源代码可以增强类中的方法      (增强 = 代理

AOP切入点表达式:

execution([权限修饰符] [返回值类型] [类全路径] [方法名称] ([参数列表]))

例如:

@Before(value = "execution(* com.minelsg.User.add(..))")

 

连接点

在一个类中,哪些方法可以被增强,那这些方法就称为连接点

切入点

实际被真正增强的方法,称为切入点

 

通知(增强)

实际增强的逻辑部分称为通知(增强)。
通知有多种类型:前置通知、后置通知、环绕通知、异常通知、最终通知。
--------------------------------------------------------------------
#前置通知@Before:   方法之前会执行
#后置通知@AfterReturning: 方法之后会执行
#环绕通知@Around:   方法的前面和后面都会执行
#异常通知@AfterThrowing: 当方法出现异常会执行
#最终通知@After:   不管有没有异常都会执行类似于finally

 

切面

把通知应用到切入点的过程就称为切面

以下为实例:

 

 

被增强类

@Component
public class User {
    public void add() {
        System.out.println("add.......");
    }
}

 

增强的类(代理类)

@Component
@Aspect  //生成代理对象
public class UserProxy {
    //前置通知
    //@Before注解表示作为前置通知
    @Before(value = "execution(* com.minelsg.User.add(..))")
    public void before() {
        System.out.println("before.....");
    }
    //执行后通知(最终通知)
    @After(value = "execution(* com.minelsg.User.add(..))")
    public void after(){
        System.out.println("after......");
    }
    //执行后返回值通知
    @AfterReturning(value = "execution(* com.minelsg.User.add(..))")
    public void afterReturning(){
        System.out.println("AfterReturning.........");
    }
    //@异常通知
    @AfterThrowing(value = "execution(* com.minelsg.User.add(..))")
    public void afterThrowing(){
        System.out.println("AfterThrowing.........");
    }
    //@Around环绕通知
    @Around(value = "execution(* com.minelsg.User.add(..))")
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        System.out.println("环绕之前.........");

        //add方法执行
        proceedingJoinPoint.proceed();

        System.out.println("环绕之后.........");
    }
}

 

通过Ioc注入后执行

public class TestAop {
    @Test
    public void testAopAnno(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        User user = (User)context.getBean("user");
        user.add();
    }
}

 

输出结果

环绕之前.........
before.....
add.......
AfterReturning.........
after......
环绕之后.........

 done~~

 

posted @ 2020-07-13 01:08  MineLSG  阅读(258)  评论(0编辑  收藏  举报