实现1:基于xml

  1. package com.rr.spring3.interf; //接口
  2.  
  3. public interface SayHello {
  4.  
  5. public void sayHello();
  6. }
  1. package com.rr.spring3.interf.impl; //接口实现类
  2.  
  3. import com.rr.spring3.interf.SayHello;
  4.  
  5. public class Hello implements SayHello {
  6. public void sayHello() {
  7. System.out.println("hello");
  8. }
  9.  
  10. }
  1. package com.rr.spring3.aop;//切面类+通知
  2.  
  3. public class HelloAspect {
  4.  
  5. // 前置通知
  6. public void beforeAdvice() {
  7. System.out.println("===========before advice");
  8. }
  9.  
  10. // 后置最终通知
  11. public void afterFinallyAdvice() {
  12. System.out.println("===========after finally advice");
  13. }
  14.  
  15. }
  1. <!-- 目标类 -->
  2. <bean id="hello" class="com.rr.spring3.interf.impl.Hello"/>
  3. <!-- 切面类 -->
  4. <bean id="helloAspect" class="com.rr.spring3.aop.HelloAspect"/>
  5.  
  6. <aop:config>
  7. <!-- 引用切面类 -->
  8. <aop:aspect ref="helloAspect">
  9. <!-- 切入点 -->
  10. <aop:pointcut id="pc" expression="execution(* com.rr.spring3.interf.*.*(..))"/>
  11. <!-- 引用切入点 ,指定通知-->
  12. <aop:before pointcut-ref="pc" method="beforeAdvice"/>
  13. <aop:after pointcut="execution(* com.rr.spring3.interf.*.*(..))" method="afterFinallyAdvice"/>
  14. </aop:aspect>
  15. </aop:config>

实现2:基于java5 注解 @Aspect

接口和接口实现类同上

  1. package com.rr.spring3.aop; //切面类+通知
  2.  
  3. import org.aspectj.lang.annotation.After; //基于 java5 注解
  4. import org.aspectj.lang.annotation.Aspect;
  5. import org.aspectj.lang.annotation.Before;
  6. import org.aspectj.lang.annotation.Pointcut;
  7.  
  8. @Aspect
  9. public class HelloAspect {
  10.  
  11. @Pointcut("execution(* com.rr.spring3.interf.*.*(..))")
  12. private void selectAll() {}
  13.  
  14. // 前置通知
  15. @Before("selectAll()")
  16. public void beforeAdvice() {
  17. System.out.println("===========before advice");
  18. }
  19.  
  20. // 后置最终通知
  21. @After("selectAll()")
  22. public void afterFinallyAdvice() {
  23. System.out.println("===========after finally advice");
  24. }
  25.  
  26. }
  1. <aop:aspectj-autoproxy/> <!-- 开启注解 -->
  2. <!-- 目标类 -->
  3. <bean id="hello" class="com.rr.spring3.interf.impl.Hello"/>
  4. <!-- 切面类 -->
  5. <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. 树之105 Construct Binary Tree from Preorder and Inorder Traversal

    题目链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 参考链 ...

  2. 牛客网数据库SQL实战(11-15)

    11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manager ...

  3. Flask学习【第5篇】:用Falsk实现的分页

    Flask实现的分页组件 from urllib.parse import urlencode,quote,unquote class Pagination(object): "" ...

  4. AndroidO Treble架构下Hal进程启动及HIDL服务注册过程【转】

    本文转载自:https://blog.csdn.net/yangwen123/article/details/79854267 通过前面对Treble架构的介绍,我们知道,Android Framew ...

  5. MSYS2 更换国内源

    转自 : http://www.cnblogs.com/findumars/p/6546088.html 最近一段时间不知怎么的,使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢.所以就翻了 ...

  6. vim使用跳转列表 jumps 来跟踪 (历史位置的)导航

    参考: Vim使用跳转列表来跟踪你的导航,你可以通过这个列表来向前或者向后导航. 跳转列表保留所有地方的轨迹,它可以跟踪文件名.行号和列号. 查看调整列表::jumps 导航键 描述 CTRL-o 跳 ...

  7. newcoder 筱玛的迷阵探险(搜索 + 01字典树)题解

    题目描述 筱玛是个快乐的男孩子. 寒假终于到了,筱玛决定请他的朋友们一起来玩迷阵探险. 迷阵可以看做一个n×nn×n的矩阵A,每个格子上有一个有一个数Ai,j. 入口在左上角的(1,1)处,出口在右下 ...

  8. 【分布式事务】spring cloud集成lcn解决分布式事务

    参考地址:https://blog.csdn.net/u010882691/article/details/82256587 参考地址:https://blog.csdn.net/oyh1203/ar ...

  9. 【Java----创建多级文件夹】

    File类中的mkdir()和mkdirs(): mkdir():只能创建一层目录. mkdirs():可以创建多层目录 代码:path可以是带文件名称的全路径 //路径 String path = ...

  10. how do I get the difference between two R named lists?

    aa<- list(a=1, b="two", c=list(3, "four")) bb <- list(a=1, c=list(3, " ...