方式一:基于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"
>

</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开头的方法进行增强

前置增强实例:

<?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 配置对象(创建对象)-->
   
<bean id="book" class="cn.bdqn.SpringAspectJ.Book"/>
    <bean id="mybook" class="cn.bdqn.SpringAspectJ.Mybook"/>
    <!--2 配置aop操作-->
   
<aop:config>
        <!--2.1配置切入点-->
       
<aop:pointcut expression="execution(* cn.SpringAspectJ.Book.*(..))" id="pointcut1"/>
        <!--2.2配置切面
        把增强用到方法上面
,要指定哪个增强-->
       
<aop:aspect ref="mybook">
            <!--配置增强类型
            method:
增强类里面使用哪个方法作为前置增强-->
           
<aop:before method="before" pointcut-ref="pointcut1"/>
        </aop:aspect>
    </aop:config> </beans>

4)       编写测试类

public class Test {
    @org.junit.Test
    public void test(){
     Book book= (Book) new ClassPathXmlApplicationContext("beans.xml").getBean("book");
     book.add();
    }
}

测试结果如下:

后置增强实例和前置一样

环绕增强:

需要增强的类

public class Book {
    public  void add(){
        System.out.println("add.........");
    }
}

增强类中的方法::

public void around(ProceedingJoinPoint proceedingJoinPoint){
    //方法之前
   
System.out.println("方法之前...");
    //执行被增强的方法
   
try {
        proceedingJoinPoint.proceed();
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
    //方法之后
   
System.out.println("方法之后");
}

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: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 配置对象-->
   
<bean id="book" class="cn.bdqn.SpringAspectJ.Book"/>
    <bean id="mybook" class="cn.bdqn.SpringAspectJ.Mybook"/>
    <!--2 配置aop操作-->
   
<aop:config>
        <!--2.1配置切入点-->
       
<aop:pointcut expression="execution(* cn.bdqn.SpringAspectJ.Book.*(..))" id="pointcut1"/>
        <!--2.2配置切面
        把增强用到方法上面
,要指定哪个增强-->
       
<aop:aspect ref="mybook">
            <!--配置增强类型
            method:
增强类里面使用哪个方法作为前置增强-->             <aop:around method="around" pointcut-ref="pointcut1"/>
        </aop:aspect>
    </aop:config>
</beans>

测试类

public class Test {
    @org.junit.Test
    public void test(){
     Book book= (Book) new ClassPathXmlApplicationContext("beans.xml").getBean("book");
     book.add();
    }
}

执行效果

方式二: 基于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. [2017-7-28]Android Learning Day7

    View动画效果 透明动画效果 旋转动画效果 移动动画效果 缩放动画效果 混合动画效果 1.透明动画效果(AlphaAnimation) 有两种方法 第一种在活动中设置,不需要xml文件 public ...

  2. centos7下mysql半同步复制原理安装测试详解

    原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...

  3. hdu 2609 How many(最小表示法)

    Problem Description Give you n ( n < 10000) necklaces ,the length of necklace will not large than ...

  4. shell中定义变量用双引号和单引号以及不用引号的区别

    1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...

  5. TimerTask的run()方法里面如何调用service层里面的方法

    在java的spring框架中,用Timer和TimerTask来实现定时任务,有时我们要在TimerTask的子类的重写run方法里,调用service层的方法. 但是不管是spring.xml配置 ...

  6. QML学习笔记(六)- 简单计时器和定时器

    做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...

  7. A1130. Infix Expression

    Given a syntax tree (binary), you are supposed to output the corresponding infix expression, with pa ...

  8. CF341E Candies Game

    题目链接 题意 有\(n\)个盒子,第\(i\)个盒子里面有\(a_i\)个糖果.每次选择两个盒子\(i,j\),假设\(a_i \le a_j\).然后从第\(j\)个盒子中拿出\(a_i\)个糖果 ...

  9. http请求415错误Unsupported Media Type

    王子乔 每一个认真生活的人,都值得被认真对待 http请求415错误Unsupported Media Type 之前用了封装的ajax,因为请求出了点问题,我试了下jQuery的$.ajax,报出了 ...

  10. 安装Redis 4.0单实例

    一.Redis简单介绍 转载于网络 Redis是一个开源(BSD许可)的内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.由于Redis采用运行在内存中的数据集工作方式,其性能卓越,能支持 ...