【Spring】AOP概述

来源:互联网 发布:淘宝古装知乎 编辑:程序博客网 时间:2024/05/18 01:34

基本概念

Aspect:切面,用于组织多个增强处理;
Advice:增强处理,在特定的点执行的方法;
Jointpoint:连接点,执行过程中明确的点,方法的调用;
Pointcut:切入点,可以插入增强处理的连接点

 

基本流程

  1. 在Spring配置文件中配置自动搜索Bean组件,自动搜索切面类
  2. Spring会根据相应的切面类对组件进行增强

 

组件Bean

@Component("User")public class Employee implements User{    ... some functions ...}

XML配置

<beans ... >    <aop:aspectj-autoproxy>    <context:component-scan base-package="com.service.aspect">        <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>    </context:component-scan></beans>

 

增强处理

Before增强处理

@Aspectpublic class AuthenticateAspect{    @Before("execution(*com.service.impl.*.*(..))")    public void Operate(){        System.out.println("运行该Bean前执行一些操作");    }}

AfterReturning增强处理

@Aspectpublic class AuthenticateAspect{    @AfterReturning(returning="rvt",pointcut="execution(*com.service.impl.*.*(..))")    public void Operate(Object rvt){        System.out.println("获取Bean的返回值:" + rvt + "后,执行一些操作");    }}

AfterThrowing增强处理

@Aspectpublic class AuthenticateAspect{    @AfterThrowing(throwing="ex",pointcut="execution(*com.service.impl.*.*(..))")    public void Operate(){        System.out.println("获取Bean的异常:" + ex+ "后,执行一些操作");    }}

After增强处理

@Aspectpublic class AuthenticateAspect{    @After("execution(*com.service.impl.*.*(..))")    public void Operate(){        System.out.println("运行该Bean后执行一些操作");    }}

Around增强处理

@Aspectpublic class AuthenticateAspect{    @Around("execution(*com.service.impl.*.*(..))")    public Object Operate(ProceedingJoinPoint pjp)throws java.lang.Throwable{        System.out.println("运行目标方法前执行一些操作");        Object[] args = pjp.getArgs();//获取目标方法的参数        if(args != null && args.length > 1){            args[0] = "123" + args[0];//修改参数        }        Object rvt = pjp.proceed(args);//获取目标方法的返回值        System.out.println("运行目标方法后执行一些操作");        if(rvt != null){ rvt = "456"; }//修改返回值    }}

 

小结

Spring中的AOP代理是由IoC容器实现的;
AspectJ采用编译时增强,而Spring采用动态增强;
我们需要做的只是:定义组件,定义切入点,定义增强处理

原创粉丝点击