方式一:基于aspectJ的XML配置

方式二:基于aspectJ的注解方式

基于aspectJ的XML配置

1)       引入相关jar

2)       创建Spring核心配置文件,必须导入aop的约束

<?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:aop="http://www.springframework.org/schema/aop"
      
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
>

  1. </beans>

3)       使用表达式配置切入点

[1] 切入点:实际增强的方法

[2] execution(<访问修饰符>?<返回值类型><方法名全路径>(<从参数>)<异常>)

表达式的几种写法:

①execution (* cn.aop.Book.add(..))对cn.aop包下的Book类中的所有方法名为add的方法进行增强

*:表示可以是任意访问修饰符

cn.aop.Book.add:方法的全路径

(..):表示可以有参数,也可以没有

②execution (*  cn.aop.Book.*(..))对cn.aop包下的Book类中的所有方法进行增强

③execution(* *.*(..))对所有包下的所有类中的所有方法进行增强

④execution(* save*(..))对所有以save开头的方法进行增强

前置增强实例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:aop="http://www.springframework.org/schema/aop"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  6.     <!--1 配置对象(创建对象)-->
  7.     <bean id="book" class="cn.bdqn.SpringAspectJ.Book"/>
  8.     <bean id="mybook" class="cn.bdqn.SpringAspectJ.Mybook"/>
  9.     <!--2 配置aop操作-->
  10.     <aop:config>
  11.         <!--2.1配置切入点-->
  12.         <aop:pointcut expression="execution(* cn.SpringAspectJ.Book.*(..))" id="pointcut1"/>
  13.         <!--2.2配置切面
  14.         把增强用到方法上面,要指定哪个增强-->
  15.         <aop:aspect ref="mybook">
  16.             <!--配置增强类型
  17.             method:增强类里面使用哪个方法作为前置增强-->
  18.             <aop:before method="before" pointcut-ref="pointcut1"/>
  19.         </aop:aspect>
  20.     </aop:config>
  21.  
  22. </beans>

4)       编写测试类

  1. public class Test {
  2.     @org.junit.Test
  3.     public void test(){
  4.      Book book= (Book) new ClassPathXmlApplicationContext("beans.xml").getBean("book");
  5.      book.add();
  6.     }
  7. }

测试结果如下:

后置增强实例和前置一样

环绕增强:

需要增强的类

  1. public class Book {
  2.     public  void add(){
  3.         System.out.println("add.........");
  4.     }
  5. }

增强类中的方法::

  1. public void around(ProceedingJoinPoint proceedingJoinPoint){
  2.     //方法之前
  3.     System.out.println("方法之前...");
  4.     //执行被增强的方法
  5.     try {
  6.         proceedingJoinPoint.proceed();
  7.     } catch (Throwable throwable) {
  8.         throwable.printStackTrace();
  9.     }
  10.     //方法之后
  11.     System.out.println("方法之后");
  12. }

XML配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.        xmlns:aop="http://www.springframework.org/schema/aop"
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  6.     <!--1 配置对象-->
  7.     <bean id="book" class="cn.bdqn.SpringAspectJ.Book"/>
  8.     <bean id="mybook" class="cn.bdqn.SpringAspectJ.Mybook"/>
  9.     <!--2 配置aop操作-->
  10.     <aop:config>
  11.         <!--2.1配置切入点-->
  12.         <aop:pointcut expression="execution(* cn.bdqn.SpringAspectJ.Book.*(..))" id="pointcut1"/>
  13.         <!--2.2配置切面
  14.         把增强用到方法上面,要指定哪个增强-->
  15.         <aop:aspect ref="mybook">
  16.             <!--配置增强类型
  17.             method:增强类里面使用哪个方法作为前置增强-->
  18.             <aop:around method="around" pointcut-ref="pointcut1"/>
  19.         </aop:aspect>
  20.     </aop:config>
  21. </beans>

测试类

  1. public class Test {
  2.     @org.junit.Test
  3.     public void test(){
  4.      Book book= (Book) new ClassPathXmlApplicationContext("beans.xml").getBean("book");
  5.      book.add();
  6.     }
  7. }

执行效果

方式二: 基于aspectJ的注解方式

1)       引入相关jar

2)       创建Spring核心配置文件,必须导入aop的约束

以上两步骤直接参照基于aspectJ的XML配置方式

3)       在Spring配置文件中开启aop操作

4)       在增强类上面加上@Aspectj的注解

在增强的方法上面加上@before注解 @before是前置增强

5)       创建test类,运行效果如下

使用aspectJ实现Spring AOP的两种方式的更多相关文章

  1. spring AOP的两种代理

    本篇记录下spring AOP的两种代理,为下一篇AOP实现做下铺垫. 1.JDK动态代理  2.cglib代理 1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP2.如果目标对象 ...

  2. Spring管理事物两种方式

    Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...

  3. springmvc配置AOP的两种方式

    spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...

  4. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

  5. (一)spring aop的两种配置方式。

    sring aop的方式有两种:(1)xml文件配置方式(2)注解的方式实现,我们可以先通过一个demo认识spring aop的实现,然后再对其进行详细的解释. 一.基于注解的springAop配置 ...

  6. 在Spring整合aspectj实现aop的两种方式

    -----------------------------基于XML配置方案目标对象接口1 public interface IUserService { public void add(); pub ...

  7. 关于aop的两种方式-基于注解和基于aspectj

    spring的aop确实好用,能够在不影响业务功能的情况下,实现一些低耦合的功能. 而aop又有两种常用的实现方式,一种是用aspectj表达式去匹配,实现全局的配置,表达式还可以使用与或非符号去连接 ...

  8. spring AOP的两种配置方式

    连接点(JoinPoint) ,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前.后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点.其他 ...

  9. spring aop的两种写法aspect和advisor

    本文转自:https://www.cnblogs.com/leiOOlei/p/3709607.html 首先看个例子,如下 接口代码: package com.lei.demo.aop.schema ...

随机推荐

  1. CF1106E Lunar New Year and Red Envelopes

    比赛时看到这题懵逼了,比完赛仔细一想是个很简单的dp = = 由于题目限制,可以发现\(B\)取红包的策略是唯一的,可以用优先队列预处理出\(B\)在第\(i\)秒可以拿到的红包的收益\(w_i\)和 ...

  2. Python3 与 C# 并发编程之~ 线程篇

      2.线程篇¶ 在线预览:https://github.lesschina.com/python/base/concurrency/3.并发编程-线程篇.html 示例代码:https://gith ...

  3. pycharm安装TensorFlow

    一.首先说下我在安装TensorFlow的过程中遇到的坑: 1.python的版本是3.5的版本,因为TensorFlow好像只支持到3.5现在.然后python需要安装64位的安装包,如果安装的是3 ...

  4. Linux安装Gitlab,附iSCSI分区挂载说明

    因为Gitlab数据要存放在共享存储,所以本次配置的重头戏倒变成了挂载ISCSI了. OS:CentOS 7.2IP:172.16.1.191/192.168.2.191 iSCSI分Target(服 ...

  5. bootstrap 栅栏系统

    媒体查询 /* 超小屏幕(手机,小于 768px) */ /* 没有任何媒体查询相关的代码,因为这在 Bootstrap 中是默认的(还记得 Bootstrap 是移动设备优先的吗?) */ /* 小 ...

  6. Java面试题-基础知识

    参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...

  7. Hadoop安装错误总结

    Master的NodeManager/DateNode未启动 日志中未出现任何错误 正常现象,如需在Master中启动可在slave文件中 slaves localhost slave01 slave ...

  8. LOJ#3023 老C的键盘

    给定树,每条边有个大于号或者小于号,表示两个节点编号的大小关系.问有多少种树满足条件.n <= 100 解:树形DP. 设fij表示以i为根的子树中i是第j小的.转移的时候要乘上两个组合数. # ...

  9. Day28--Python--网络通信协议 tcp与udp下的socket

    昨日内容回顾: 1. CS架构 服务端客户端架构 软件CS架构: 京东,淘宝,QQ,微信,暴风影音,快播 硬件CS架构: 打印机 服务端: 提供服务的 客户端: 享受服务的 BS架构: 浏览器和服务端 ...

  10. 如何修改const常量值

    总结:这个跟计算机语言类别和编译器有关,本文是在linux环境下说明的. 分两种情况: 1. C语言: 2. C++语言: /*! * \Description: * \author scictor ...