Spring基础-4-AOP注解

来源:互联网 发布:化工项目网络计划绘制 编辑:程序博客网 时间:2024/06/09 16:15

1,注解

1.1,通知类型

  • @Before – 前置通知
  • @AfterReturing – 后置通知
  • @Around – 环绕通知(目标对象方法默认不执行的,需要手动执行)
  • @After – 最终通知
  • @AfterThrowing – 异常抛出通知

1.2,配置通用的切入点

使用@Pointcut定义通用的切入点

@Aspectpublic class MyAspectAnno {    @Before(value="MyAspectAnno.fn()")    public void log(){        System.out.println("记录日志...");    }    @Pointcut(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())")    public void fn(){}}

2,注解方式完成AOP的开发

2.1,导入依赖和约束

2.2,创建包结构,编写具体的接口和实现类

  • package:com.itheima.demo2
  • Interface:CustomerDao
  • Impl:CustomerDaoImpl

2.3, 目标类配置到Spring中

<bean id="customerDao" class="com.itheima.demo3.CustomerDaoImpl"/>

2.4,定义切面类

@Aspectpublic class MyAspectAnno {    @Before("MyAspectAnno.pointcut1()")    public void before(){        System.out.println("前置通知===========");    }    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")    private void pointcut1(){}        }

2.5,开启aop注解的自动代理

<aop:aspectj-autoproxy/>

2.6,在配置文件中完成aop的配置

 <bean id="myAspectAnno" class="cn.itcast.spring.demo4.MyAspectAnno"></bean> 

2.7,其他注解

public class MyAspectAnno {    @Before("MyAspectAnno.pointcut1()")    public void before(){        System.out.println("前置通知===========");    }    @AfterReturning("MyAspectAnno.pointcut2()")    public void afterReturning(){        System.out.println("后置通知===========");    }    @Around("MyAspectAnno.pointcut3()")    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{        System.out.println("环绕前通知==========");        Object obj = joinPoint.proceed();        System.out.println("环绕后通知==========");        return obj;    }    @AfterThrowing("MyAspectAnno.pointcut4()")    public void afterThrowing(){        System.out.println("异常抛出通知========");    }    @After("MyAspectAnno.pointcut4()")    public void after(){        System.out.println("最终通知==========");    }    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")    private void pointcut1(){}    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.update(..))")    private void pointcut2(){}    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.delete(..))")    private void pointcut3(){}    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.find(..))")    private void pointcut4(){}}
原创粉丝点击