SpringAOP的介绍和使用方法

发布时间:2021-06-29 15:50:12 作者:chen
来源:亿速云 阅读:141

这篇文章主要介绍“SpringAOP的介绍和使用方法”,在日常操作中,相信很多人在SpringAOP的介绍和使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringAOP的介绍和使用方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、AOP介绍

AOP ,面向切面编程,在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。其实就是在代码运行,进行一定的包装,如在方法执行前、方法返回后、方法抛出异常后等地方进行一定的拦截处理或者叫增强处理

先讲一下AspectJ和Spring AOP关系,网上很多文章对AspectJ存在错误说法

AspectJ:

SpringAOP:

二、Spring AOP术语解释

Joinpoint(连接点)
所谓连接点是指能够被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点(任何一个方法都可以称为连接点)

Pointcut(切入点)
切入点是指我们要对哪些Joinpoint进行拦截的定义(对哪个方法进行增强)

Advice(通知/增强)
通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)(要给它增加什么功能)

Target(目标对象)
代理的目标对象

Weaving(织入)
是指把增强应用到目标对象来创建新的代理对象的过程(怎样得到代理对象)

Proxy(代理)
一个类被AOP织入增强后,就产生一个结果代理类

Aspect(切面)
是切入点和通知的结合,构成切面,我们可以使用注解或者xml进行配置

三、Spring AOP注解使用

1. 在 xml 中配置
开启 @AspectJ 的注解,还有其它方式,这里不介绍

<aop:aspectj-autoproxy/>

2. 使用@Aspect注解
定义实现AOP的配置类
@Aspect 注解要作用在 bean 上面

@Component@Aspectpublic class LogAspect {}

3. 配置 Pointcut
用于定义哪些方法需要被增强或者说需要被拦截

    @Pointcut(""execution(* com.ljj.service(..))"")private void controllerAspect() {// TODO Auto-generated method stub}
     @Pointcut("@annotation(com.ljj.annotation.Log)")private void controllerAspect1() {// TODO Auto-generated method stub}@Pointcut(""within(com.ljj.service..*)"")private void controllerAspect2() {// TODO Auto-generated method stub}@Pointcut("bean(*Service)")private void controllerAspect3() {// TODO Auto-generated method stub}

4. 配置 Advice

   @Aspectpublic class AdviceExample {// 下面方法就是写拦截 "dao层实现"@Before("com.ljj.aop.dataAccessOperation()")public void doAccessCheck() {// ... 实现代码}@Before("execution(* com.ljj.dao.*.*(..))")public void doAccessCheck() {// ... 实现代码}@AfterReturning("com.ljj.aop.dataAccessOperation()")public void doAccessCheck() {// ...}@AfterReturning(pointcut="com.ljj.aop.dataAccessOperation()",returning="retVal")public void doAccessCheck(Object retVal) {// 这样,进来这个方法的处理时候,retVal 就是相应方法的返回值,是不是非常方便// ... 实现代码}// 异常返回@AfterThrowing("com.ljj.aop.dataAccessOperation()")public void doRecoveryActions() {// ... 实现代码}@AfterThrowing(pointcut="com.ljj.aop.dataAccessOperation()",throwing="ex")public void doRecoveryActions(DataAccessException ex) {// ... 实现代码}// 注意理解它和 @AfterReturning 之间的区别,这里会拦截正常返回和异常的情况@After("com.ljj.aop.dataAccessOperation()")public void doReleaseLock() {// 通常就像 finally 块一样使用,用来释放资源。// 无论正常返回还是异常退出,都会被拦截到}// 既能做 @Before 的事情,也可以做 @AfterReturning 的事情@Around("com.ljj.businessService()")public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {// start stopwatchObject retVal = pjp.proceed();// stop stopwatchreturn retVal;}}

上面Advice都已经匹配了对应的PointCut,这样定义可以不用再定义PointCut了。也可以使用下面这种PointCut + Advice

//定义日志注解@Target({ ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Log {//操作名String optName();//操作类型OperateType optType();//操作表名String optTable();//操作编码String optCode();
  }


   @Pointcut("@annotation(com.ljj.annotation.Log)")private void controllerAspect() {// TODO Auto-generated method stub}//日志切面@Around("controllerAspect()")public Object around(ProceedingJoinPoint pjp) throws Throwable {   try {   		//方法执行前操作result = point.proceed();//方法执行后操作} catch (Exception e) {e.printStackTrace();}}

到此,关于“SpringAOP的介绍和使用方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Dockerfile的介绍和使用方法
  2. XML和YAML的使用方法介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring

上一篇:Android Studio中怎么配置内嵌JDK

下一篇:Android中怎么使用ValueAnimator实现属性动画

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》