实现1:基于xml

 package com.rr.spring3.interf;  //接口

 public interface SayHello {

     public void sayHello();
 }
 package com.rr.spring3.interf.impl; //接口实现类

 import com.rr.spring3.interf.SayHello;

 public class Hello implements SayHello {
     public void sayHello() {
         System.out.println("hello");
     }

 }
 package com.rr.spring3.aop;//切面类+通知

 public class HelloAspect {

     // 前置通知
     public void beforeAdvice() {
         System.out.println("===========before advice");
     }

     // 后置最终通知
     public void afterFinallyAdvice() {
         System.out.println("===========after finally advice");
     }

 }
 <!-- 目标类 -->
 <bean id="hello" class="com.rr.spring3.interf.impl.Hello"/>
 <!-- 切面类 -->
 <bean id="helloAspect" class="com.rr.spring3.aop.HelloAspect"/>

 <aop:config>
   <!-- 引用切面类  -->
    <aop:aspect ref="helloAspect">
        <!--  切入点 -->
        <aop:pointcut id="pc" expression="execution(* com.rr.spring3.interf.*.*(..))"/>
        <!-- 引用切入点 ,指定通知-->
        <aop:before pointcut-ref="pc" method="beforeAdvice"/>
        <aop:after pointcut="execution(* com.rr.spring3.interf.*.*(..))"  method="afterFinallyAdvice"/>
    </aop:aspect>
 </aop:config>

实现2:基于java5 注解 @Aspect

接口和接口实现类同上

 package com.rr.spring3.aop; //切面类+通知

 import org.aspectj.lang.annotation.After; //基于 java5 注解
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;

 @Aspect
 public class HelloAspect {

     @Pointcut("execution(* com.rr.spring3.interf.*.*(..))")
     private void selectAll() {}

     // 前置通知
     @Before("selectAll()")
     public void beforeAdvice() {
         System.out.println("===========before advice");
     }

     // 后置最终通知
     @After("selectAll()")
     public void afterFinallyAdvice() {
         System.out.println("===========after finally advice");
     }

 }
 <aop:aspectj-autoproxy/>  <!-- 开启注解 -->
 <!-- 目标类 -->
 <bean id="hello" class="com.rr.spring3.interf.impl.Hello"/>
 <!-- 切面类 -->
 <bean id="helloAspect" class="com.rr.spring3.aop.HelloAspect"/>

测试结果:

note:

v1.0.1:

①第二种方法是aspectjweaver jar包的注解

spring ----> aop的两种实现方式的更多相关文章

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

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

  2. spring AOP的两种配置方式

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

  3. JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解

    在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...

  4. spring AOP的两种代理

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

  5. AOP的两种实现方式

    技术交流群 :233513714 AOP,面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.    Aspect Oriented Progr ...

  6. Spring定时器的两种实现方式

    有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz. 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 imp ...

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

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

  8. 使用aspectJ实现Spring AOP的两种方式

    方式一:基于aspectJ的XML配置 方式二:基于aspectJ的注解方式 基于aspectJ的XML配置 1)       引入相关jar包 2)       创建Spring核心配置文件,必须导 ...

  9. Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)

    第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...

随机推荐

  1. 20145311王亦徐 《网络对抗技术》 Web安全基础实践

    2014531王亦徐 <网络对抗技术> Web安全基础实践 实验内容 利用WebGoat平台尝试了一些XSS.CSRF.SQL注入攻击 基础问题回答 1.SQL注入攻击原理,如何防御原理: ...

  2. 尚硅谷面试第一季-10SpringMVC的工作流程

    目录结构: 关键代码: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xml ...

  3. 没有使用Material组件和使用了的对比

    import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends S ...

  4. oracle 之 定时任务,存储过程和游标等语法案例

    --定时任务 declare job20 number; begin sys.dbms_job.submit(job20,'test1;',sysdate,'sysdate+1'); end; --存 ...

  5. ES6中的函数和数组补漏

    对象的函数解构 我们在前后端分离时,后端经常返回来JSON格式的数据,前端的美好愿望是直接把这个JSON格式数据当作参数,传递到函数内部进行处理.ES6就为我们提供了这样的解构赋值. let json ...

  6. UVA 11019 Matrix Matcher(哈希)

    题意 给定一个 \(n\times m\) 的矩阵,在给定一个 \(x\times y\) 的小矩阵,求小矩阵在大矩阵中出现的次数. \(1 \leq n,m \leq 1000\) \(1\leq ...

  7. Servlet简介及其生命周期详解

    简介        Servlet生命周期,即阐述Servlet从产生到毁灭的整个过程.         在Servlet产生到消亡的过程中,有三个生命周期函数,初始化方法init(),处理客户请求的 ...

  8. C#题目及答案(2)

    1. NET和C#有什么区别 答:.NET一般指 .NET FrameWork框架,它是一种平台,一种技术. C#是一种编程语言,可以基于.NET平台的应用. 2.一列数的规则如下: 1.1.2.3. ...

  9. python学习 day07打卡 文件操作

    本节主要内容: 初识文件操作 只读(r,rb) 只读(w,wb) 追加(a,ab) r+读写 w+写读 a+追加写读 其他操作方法 文件的修改以及另一种打开文件句柄的方法 一. 初识文件操作 使用py ...

  10. Jenkins参数化构建(三)之 Jenkins从文件中读取运行参数

    安装Extended Choice Parameter插件 选择‘参数化构建过程’ maven command line中进行引用 clean test -DsuiteXmlFile=src/main ...