步骤:
  a)在beans.xml文件中加上对应的xsd文件 spring-aop.xsd

  b)加上<aop:aspectj-autoproxy>,使用aspectj来完成aop

  1. <!-- 使用AspectJ 中的 AOP注解 需要先加上下面这句 -->
  2. <aop:aspectj-autoproxy/>
  3.  
  4. </beans>

  c) 此时就可以解析对应的 Annotation  

  d) 建立我们的拦截类

  e) 用 @Aspect 注解这个类

  f) 建立处理方法

  g) 用@Before 来注解方法

  h) 写明白切入点(execution)

  i) 让 spring 对我们的拦截器类进行管理

  

常见的Annotation

  1.@Pointcut 切入点声明,以供其他方法使用

  2.@Before 方法  执行之前织入

  3.@AfterThrowing  方法抛出异常后织入

  4.@After  类似异常的finally

  5.@Around  环绕  类似 filter,如需继续往下执行,则需要像filter中执行FilterChain.doFilter(..)一样

  执行ProceedingJoinPoint.proceed()  方可,

  

  1. @Around("execution(* com.bjsxt.dao..*.*(..))")
  2. public void before(ProceedingJoinPoint pjp) throws Throwable{
  3. System.out.println("method start");
  4. pjp.proceed();//类似FilterChain.doFilter(..)告诉jvm继续向下执行
  5. }

  

拦截器类:

  1. /*使用 Aspectj 的AOP 自动生成代理*/
  2. @Aspect
  3. /*这个类也需要被加载到Spring容器中,不然怎么代理*/
  4. @Component
  5. public class MethodInterceptor {
  6. //@Before("execution(public void com.bjsxt.service.UserService.add(com.bjsxt.model.User))")
  7. //不能直接针对UserService 进行织入,是因为,UserService没有实现接口,要导入 cglib
  8. //在一个类没有实现接口时,如果要生成代理,需要使用 cglib.jar 来操作二进制码 来产生 代理的代码
  9.  
  10. //定义一个切点的集合 ,为这个集合起一个名字,为myMethod
  11. //想使用这个切点的集合,只需要 以 myMethod 为value 即可
  12. //public * com.bjsxt.service..*.add(..)) ==== com.bjsxt.service的任意子包下的任意类的add方法
  13. @Pointcut("execution(public * com.bjsxt.service..*.add(..))")
  14. public void myMethod(){};
  15.  
  16. //一个类如果实现了 接口,会使用JDK自带的 Proxy 和 InvocationHandler,来帮你产生代理
  17. @Before("myMethod()")
  18. public void beforeMethod() {
  19. System.out.println("before");
  20. }
  21.  
  22. /*在方法返回结果之后,织入*/
  23. @AfterReturning("myMethod()")
  24. public void afterMethod() {
  25. System.out.println("after");
  26. }
  27.  
  28. /*将指定方法around住,可以在这个方法前后织入业务,proceed() 执行此方法*/
  29. @Around("myMethod()")
  30. public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
  31. System.out.println("Before Around Method");
  32. pjp.proceed();
  33. System.out.println("After Around Method");
  34. }
  35. }

测试类:

  1. public class UserServiceTest {
  2. @Test
  3. public void test() throws Exception{
  4.  
  5. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
  6. //注:因为UserService 没有实现接口,使用cglib 操作二进制码,生成代理对象,所以这里是直接使用 UserService 去接收,
  7. //在 UserService 实现了接口的情况下,就需要是用那个接口去接收,因为 在 使用jdk的 Proxy生成代理对象时,返回的是实现了这个接口的代理类,而不是UserService
  8. UserService service = (UserService) applicationContext.getBean("userService");
  9.  
  10. service.add(new User());
  11. }
  12. }

a) 加上对应的xsd文件spring-aop.xsd

5.AOP配置与应用(annotation的方式)的更多相关文章

  1. Spring AOP配置方式

    AOP 面向切面编程,允许在 java 应用中的方法调用的前后做一些处理. 本文通过实例介绍两种主要的Spring AOP 配置方式:xml 方式配置,注解方式配置 XML 方式配置 1. 项目包类结 ...

  2. spring aop配置及用例说明(1)

    欢迎转载交流,博客地址http://www.cnblogs.com/shizhongtao/p/3469776.html 首先,什么是aop,其实通俗一点讲就是,再方法执行时候我们加入其它业务逻辑.比 ...

  3. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  4. 利用aop插入异常日志的2种方式

    AOP是面向切面编程,利用这个技术可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分的耦合性降低,提高代码的可重用性,同时提高开发效率(来自百度百科). Spring AOP有两种实现方式,一 ...

  5. java框架之Spring(2)-注解配置IOC&AOP配置

    注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...

  6. Spring入门4.AOP配置深入

    Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...

  7. Spring的AOP配置

    Spring的AOP配置 1.先写一个普通类: package com.spring.aop; public class Common {  public void execute(String us ...

  8. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring声明式事务管理(基于Annotation注解方式实现)

    在 Spring 中,除了使用基于 XML 的方式可以实现声明式事务管理以外,还可以通过 Annotation 注解的方式实现声明式事务管理. 使用 Annotation 的方式非常简单,只需要在项目 ...

  9. 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)

    声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...

  10. 三(二)、AOP配置

    一.AOP的配置(注解) 步骤一.导入jar包: 处理那5个jar包之外,还需要导入: aopalliance aspectjweaver spring-aop spring-aspects 步骤二. ...

随机推荐

  1. PAT 甲级 1023 Have Fun with Numbers (20 分)(permutation是全排列题目没读懂)

    1023 Have Fun with Numbers (20 分)   Notice that the number 123456789 is a 9-digit number consisting ...

  2. Windows下Tesseract-OCR的安装

    可以去Github查看tesseract-ocr的信息:https://github.com/tesseract-ocr/tesseract 在写这篇随笔的时候(2018年8月21日)最新版本是3.0 ...

  3. antd二级联动异步加载

    /** * Created by Admin on 2016/9/19. * 批量导入 */ import React, {Component, PropTypes} from "react ...

  4. iOS-上传头像的使用

    static NSString *const uploadSuccess = @"更改头像成功"; @interface DMAccountInformationViewContr ...

  5. Java进程监控

    目录 1.引言 2. 程序启停, 为进程自定义项目名称 3. 操作系统判断 4. 获取进程信息 5. 内存,CPU信息 6. 堆内存信息 7. 端口信息 8. 线程信息 9. MXBean使用样例 9 ...

  6. Linux进程批量管理工具

    在使用docker容器时,可以有单机的docker-compose批量编排工具,甚至还有集群的k8s之类编排工具,那么在Linux系统中同样也有相关的批量管理进程的工具,其中使用最多的应该就是supe ...

  7. appium(屏幕滑动)

    class handleswipe(): """ 屏幕滑动操作 """ def __init__(self, driver, functio ...

  8. windows下安装配置winpcap

    winpcap官网:http://www.winpcap.org/ 1.首先下载安装winpcap.exe,http://www.winpcap.org/install/default.htm 目的是 ...

  9. 轻松搞定Vue 使用SignalR与Asp.net Core通讯

    前言 针对于Web与其他应用的的通讯,在.Net中,SignalR是一个不错的选择,在前后端没有分离的时候,直接引用对应的signalr.js文件即可: 这里主要记录Vue与Asp.netcore 前 ...

  10. [Agc029E]Wandering TKHS_树形dp_树上差分

    Wandering TKHS 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_e 数据范围:略. 题解: 好神啊 Orz司队 https:// ...