目录

Spring的AOP-AspectJ注解方式

1.创建类,在类里面定义方法

2.创建增强类

3.进行通知的配置

(1)在Spring 配置文件中,开启直接扫描

(2)使用注解创建User 和 UserProxy 对象

(3)在增强类上面添加注解@Aspect

(4)在Spring 配置文件中开启生成代理对象

4.配置不同类型的通知

(1)在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

5.测试:

全部进行测试:

测试结果:

观察:

7.如果有多个增强类同时对一个方法进行增强,可以设置增强类的优先级

(1)在增强类上面添加注解@Order(数字类型值)

结果:


Spring的AOP-AspectJ注解方式

(需要看上一章把xjar包都导入才可以执行以下)

1.创建类,在类里面定义方法

新建一个aop_annotation包

在aop_annotation包内新建一个User类

User类代码如下:

package com.lbj.spring5.aop_annotation;public class User {public void add(){System.out.println("add。。。");}
}

2.创建增强类

package com.lbj.spring5.aop_annotation;//增强的类
public class UserProxy {//前置通知public void before(){System.out.println("before");}
}

3.进行通知的配置

(1)在Spring 配置文件中,开启直接扫描

bean2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!--名称空间-->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!--开启注解扫描/开启组件扫描--><context:component-scan base-package="com.lbj.spring5.aop_annotation"></context:component-scan>
</beans>

(2)使用注解创建User 和 UserProxy 对象

一个是被增强的User类

一个是增强的UserProxy类

(3)在增强类上面添加注解@Aspect

(4)在Spring 配置文件中开启生成代理对象

4.配置不同类型的通知

(1)在增强类的里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置

package com.lbj.spring5.aop_annotation;import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;//增强的类
@Component
@Aspect   //生成代理对象
public class UserProxy {//前置通知//@Before注解表示作为前置通知@Before(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void before(){System.out.println("before");}
}

5.测试:

注意事项:当我们使用了maven搭建项目的时候,bean1.xml文件需要到resources文件里面才能被使用

测试代码:

package com.lbj.spring5.test;import com.lbj.spring5.aop_annotation.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestAop {@Testpublic void testAopAnnotation(){//加载配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");//得到对象,引入依赖User user = context.getBean("user", User.class);//调用对象的方法user.add();}
}

测试结果:

全部进行测试:

package com.lbj.spring5.aop_annotation;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;//增强的类
@Component
@Aspect   //生成代理对象
public class UserProxy {//前置通知//@Before注解表示作为前置通知@Before(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void before(){System.out.println("before...");}//最终通知@After(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void after(){System.out.println("after...");}//后置通知、返回通知@AfterReturning(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void afterReturning(){System.out.println("afterReturning...");}//异常通知@AfterThrowing(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void afterThrowing(){System.out.println("afterThrowing...");}//环绕通知@Around(value = "execution(* com.lbj.spring5.aop_annotation.User.add(..))")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{System.out.println("beforeAround...");//被增强的方法执行proceedingJoinPoint.proceed();System.out.println("afterAround...");}
}

测试类:

package com.lbj.spring5.test;import com.lbj.spring5.aop_annotation.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** Created by 14811 on 2020/12/23.*/
public class TestAop {@Testpublic void testAopAnnotation(){//加载配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");//得到对象,引入依赖User user = context.getBean("user", User.class);//调用对象的方法user.add();}
}

测试结果:

手动测试异常类:

明显10/0 是异常的

package com.lbj.spring5.aop_annotation;import org.springframework.stereotype.Component;//被增强的类
@Component
public class User {public void add(){int i=10/0;System.out.println("add...");}
}

测试结果:

观察:

after不管有没有异常都会执行

afterReturning 只要出现异常就不会执行

6.相同的切入点抽取

作用是:把一些重复写的写成公共部分

进行方法调用即可

7.如果有多个增强类同时对一个方法进行增强,可以设置增强类的优先级

(1)在增强类上面添加注解@Order(数字类型值)

数字类型值:越小,优先等级越高

对比:

结果:

8.完全注解开发:

(1)创建配置类,不需要创建xml配置文件

@Configuration

@ComponentScan(basePackages={''包路径''})

@EnableAspectJAutoProsy(proxyTargetClass=true)

public class ConfigAop{

}

Spring的AOP-AspectJ注解方式相关推荐

  1. Spring(四)AOP的注解方式用法

    1. Spring使用AspectJ进行AOP的开发:(注解的方式) 1.1 引入相关的jar包: * spring的传统AOP的开发的包 spring-aop-4.2.4.RELEASE.jar c ...

  2. 面向切面(AOP)之Spring接口方式 schema配置方式 aspectj注解方式

    一.初识AOP   关于AOP的学习可以参看帮助文档:spring-3.2.0.M2\docs\reference\html目录下index.html的相关章节      1.AOP:Aspect-O ...

  3. spring AOP自定义注解方式实现日志管理

    转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...

  4. Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了)---zhangkaitao

    Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) http://jinnianshilongnian.iteye.com/blog/1415606    --zha ...

  5. spring实现AOP环绕通知方式

    spring实现AOP环绕通知方式 点关注不迷路,欢迎再来! 精简博客内容,尽量已行业术语来分享. 努力做到对每一位认可自己的读者负责. 帮助别人的同时更是丰富自己的良机. 目录 spring实现AO ...

  6. Spring框架(五):Spring事务简述(注解方式)

    一.Spring事务的概述 事务的作用是什么? 简单来说,就是在数据层保障一系列的数据库操作同成功同失败(提交和回滚) Spring事务作用︰在数据层或[业务层]保障一系列的数据库操作同成功同失败. ...

  7. Spring依赖注入(注解方式)

    Spring依赖注入(注解方式) 在Spring中,尽管使用XML配置文件就可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给程序的维护与升级带来一定的困 ...

  8. Spring整合Mybatis之注解方式,(注解整合Junit)

    Spring整合Mybatis之注解方式 我有一篇博客详细写了我自己使用xml的方法Spring整合MyBatis,现在我就把核心配置文件中的每个bean的配置使用注解的方式实现 注解整合MyBati ...

  9. aop注解配置切点 spring_springboot aop 自定义注解方式实现一套完善的日志记录

    一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型(增删改查),详细描述,返回值. 二:项目结构图 如果想学习Java ...

  10. 【Spring】配置事务 注解方式与非注解方式

    Spring的事务配置非注解方式 <!--通知--><tx:advice id="txAdvice" transaction-manager="txTr ...

最新文章

  1. 控制寄存器和系统地址寄存器
  2. 借用计算机不及时归还,陕西省农村信用社笔试试题(二)
  3. 润乾报表列太多导致渲染速度慢_报表自动化: 如何选择可视化大屏开发利器
  4. Android安卓APK反编译逆向
  5. first OData Batch operation when Sales Pipeline is launched
  6. poj 3261 Milk Patterns 后缀数组 最长重复子串
  7. 【渝粤教育】电大中专计算机常用工具软件 (2)作业 题库
  8. 学用 TStringGrid [1] - ColCount、RowCount、Cells
  9. SIFT算法中概念简单解释
  10. 新版Elemen Plus 国际化 1.0.2-beta.59(包含59)
  11. 2年的程序员之路 ,分享给你们
  12. c语言让系统蓝屏,0x000000116,教您解决电脑蓝屏代码0x000000116
  13. java模拟摇摆小球程序代码_Android实现左右摆动的球体动画效果
  14. FCKeditor上传漏洞总结
  15. pdps修改服务器,Tecnomatix PDPS二次开发功能介绍
  16. Java 编程思想 读书笔记
  17. golang 如何快速测试代码
  18. AMBA总线协议(一)——一文看懂APB总线协议
  19. VSCode 安装Flutter 教程
  20. 微信文件夹的dat文件怎么打开_微信dat文件怎么打开?

热门文章

  1. StringBuilder String string.Concat 字符串拼接速度再议
  2. 使用HDFS客户端java api读取hadoop集群上的信息
  3. arm-linux-gnueabi和arm-linux-gnueabihf 的区别
  4. oracle数据库卸载(需要完全卸载oracl才能重装)
  5. 正确的 zip 压缩与解压代码
  6. 使用HTML5的Canvas画布来剪裁用户头像
  7. The Best and the Worst
  8. 计算机网络(十八)-以太网
  9. 随笔:朋友圈扫街图有感(爱情)
  10. 开启httponly之后登陆失败_二次元约会模拟《少女都市》正式版登陆Steam 橘势大好...