1. 为了在Spring中启动@AspectJ支持,需要在类加载路径下新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar。除此之外,Spring AOP还需要依赖一个aopalliance.jar包
  2. 定义一个类似ServiceAspect.java这样的切面bean:
  3.  1 package com.hyq.aop;
    2
    3 import org.apache.commons.logging.Log;
    4 import org.apache.commons.logging.LogFactory;
    5 import org.aspectj.lang.JoinPoint;
    6 import org.aspectj.lang.ProceedingJoinPoint;
    7 import org.aspectj.lang.annotation.After;
    8 import org.aspectj.lang.annotation.AfterReturning;
    9 import org.aspectj.lang.annotation.AfterThrowing;
    10 import org.aspectj.lang.annotation.Around;
    11 import org.aspectj.lang.annotation.Aspect;
    12 import org.aspectj.lang.annotation.Before;
    13 import org.aspectj.lang.annotation.Pointcut;
    14 import org.springframework.stereotype.Component;
    15
    16 /**
    17 * 系统服务组件Aspect切面Bean
    18 * @author Shenghany
    19 */
    20 //声明这是一个组件
    21 @Component
    22 //声明这是一个切面Bean
    23 @Aspect
    24 public class ServiceAspect {
    25
    26 private final static Log log = LogFactory.getLog(ServiceAspect.class);
    27
    28 //配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点
    29 @Pointcut("execution(* com.hyq.aop..*(..))")
    30 public void aspect(){ }
    31
    32 /*
    33 * 配置前置通知,使用在方法aspect()上注册的切入点
    34 * 同时接受JoinPoint切入点对象,可以没有该参数
    35 */
    36 @Before("aspect()")
    37 public void before(JoinPoint joinPoint){
    38 System.out.println("执行before.....");
    39 }
    40
    41 //配置后置通知,使用在方法aspect()上注册的切入点
    42 @After("aspect()")
    43 public void after(JoinPoint joinPoint){
    44 System.out.println("执行after.....");
    45 }
    46
    47 //配置环绕通知,使用在方法aspect()上注册的切入点
    48 @Around("aspect()")
    49 public void around(JoinPoint joinPoint){
    50 long start = System.currentTimeMillis();
    51 try {
    52 ((ProceedingJoinPoint) joinPoint).proceed();
    53 long end = System.currentTimeMillis();
    54 if(log.isInfoEnabled()){
    55 log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms!");
    56 }
    57 } catch (Throwable e) {
    58 long end = System.currentTimeMillis();
    59 if(log.isInfoEnabled()){
    60 log.info("around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage());
    61 }
    62 }
    63 }
    64
    65 //配置后置返回通知,使用在方法aspect()上注册的切入点
    66 @AfterReturning("aspect()")
    67 public void afterReturn(JoinPoint joinPoint){
    68 if(log.isInfoEnabled()){
    69 log.info("afterReturn " + joinPoint);
    70 }
    71 }
    72
    73 //配置抛出异常后通知,使用在方法aspect()上注册的切入点
    74 @AfterThrowing(pointcut="aspect()", throwing="ex")
    75 public void afterThrow(JoinPoint joinPoint, Exception ex){
    76 if(log.isInfoEnabled()){
    77 log.info("afterThrow " + joinPoint + "\t" + ex.getMessage());
    78 }
    79 }
    80
    81 }

    3.定义一个业务组件,如:

  4.  1 package com.hyq.aop;
    2
    3 import org.apache.commons.logging.Log;
    4 import org.apache.commons.logging.LogFactory;
    5 import org.springframework.stereotype.Component;
    6 @Component()
    7 public class UserService {
    8
    9 private final static Log log = LogFactory.getLog(UserService.class);
    10
    11 public User get(long id){
    12 if(log.isInfoEnabled()){
    13 log.info("getUser method . . .");
    14 }
    15 return new User();
    16 }
    17
    18 public void save(User user){
    19 if(log.isInfoEnabled()){
    20 log.info("saveUser method . . .");
    21 }
    22 }
    23
    24 public boolean delete(long id) throws Exception{
    25 if(log.isInfoEnabled()){
    26 log.info("delete method . . .");
    27 throw new Exception("spring aop ThrowAdvice演示");
    28 }
    29 return false;
    30 }
    31
    32 }

    业务组件要用@Component()注解修饰

    4.在bean.xml中加入下面配置:

1 <!-- 激活组件扫描功能,在包com.hyq.aop及其子包下面自动扫描通过注解配置的组件 -->
2 <context:component-scan base-package="com.hyq.aop"/>
3 <!-- 激活自动代理功能 -->
4 <!-- <aop:aspectj-autoproxy proxy-target-class="true"/> -->
5 <aop:aspectj-autoproxy/>

转载:https://www.cnblogs.com/zest/p/5883866.html

Spring AOP基于注解的“零配置”方式实现的更多相关文章

  1. spring-第十七篇之spring AOP基于注解的零配置方式

    1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...

  2. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式

    8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...

  3. 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式

    转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...

  4. 10 Spring框架--基于注解的IOC配置

    1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...

  5. Spring Aop基于注解的实现

    一.AspectOriented Programing,面向切面编程.   AOP主要用于日志记录,性能统计,安全控制(权限控制),事务处理,异常处理等.将日志记录,性能统计,安全控制,事务处理,异常 ...

  6. spring-第十八篇之spring AOP基于XML配置文件的管理方式

    1.在XML配置文件中配置切面.切入点.增强处理.spring-1.5之前只能使用XML Schema方式配置切面.切入点.增强处理. spring配置文件中,所有的切面.切入点.增强处理都必须定义在 ...

  7. spring的基于注解的IOC配置

    1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...

  8. Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource 编辑 ​ Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionF ...

  9. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

随机推荐

  1. Node大文件处理

    之前有个需求要将文件解析再处理,当时直接将整个文件内容读到内存中然后解析,也是没有考虑到大文件的问题,那么要如何解析大文件呢? 输入:文件的内容是多个json,按顺序排列 输出:解析后的json数据 ...

  2. (一)Nginx正向代理与反向代理

    引言:身为前端开发人员来说对于Nginx的作用或许很少听到,这个东西是后端使用的,Nginx对前端而言意味着什么,有什么用呢?大白会整理出几篇文章给大家细细道来. 1.正向代理的概念 正向代理,也就是 ...

  3. my vim IDE 编辑器的配置

    <h4>1.自定义编辑.vimrc的快捷键</h4><blockquote>"Set mapleaderlet mapleader = ",&q ...

  4. 51nod 1495 中国好区间

    阿尔法在玩一个游戏,阿尔法给出了一个长度为n的序列,他认为,一段好的区间,它的长度是>=k的,且该区间的第k大的那个数,一定大于等于T.那么问题来了,阿尔法想知道有多少好的区间. 由于阿尔法的序 ...

  5. 【java规则引擎】drools6.5.0版本中kmodule.xml解析

    kmodule.xml文件存放在src/main/resources/META-INF/文件夹下. <?xml version="1.0" encoding="UT ...

  6. ACM学习历程—51NOD 1770数数字(循环节)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...

  7. nginx 流量拷贝模块 ngx_http_mirror_module 安装试用

    1. 下载源码编译 https://nginx.org/download/nginx-1.13.4.tar.gz   2. 下载依赖模块包       这里直接yum 安装 yum -y instal ...

  8. Visual Studio Code如何调试代码

    首先安装扩展调试插件debugger for chrome 点击瓢虫按钮,进行调试项目的配置,点击配置按钮 选择Chrome环境, 会弹出Chrome调试配置文件launch.json,修改下端口即可 ...

  9. FastAdmin 将 PHP 框架升级到 ThinkPHP 5.1

    FastAdmin 将 PHP 框架升级到 ThinkPHP 5.1 社区经常有人问什么时候升级到 ThinkPHP 5.1,但是 ThinkPHP 5.1 和 ThinkPHP 5.0 差别非常大, ...

  10. bzoj 2555 SubString——后缀自动机+LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 要维护 right 集合的大小.因为 fa 会变,且 fa 构成一棵树,所以考虑用 L ...