热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

详解在Spring中如何使用AspectJ来实现AOP

这篇文章主要介绍了详解在Spring中如何使用AspectJ来实现AOP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

AspectJ 是通过注解来描述切点与增强的。

1 开发环境要求

因为要使用注解,所以请确保使用的 Java5.0 及以上版本。

引入 AspectJ 相关类库:


 org.aspectj
 aspectjrt
 ${aspectj.version}


 org.aspectj
 aspectjweaver
 ${aspectj.version}


 org.aspectj
 aspectjtools
 ${aspectj.version}


 aopalliance
 aopalliance
 ${aopalliance.version}

2 编程方式

@Aspect//标识切面

public class PreRentAspect {
 /**
  * 增强逻辑
  */
 @Before("execution(* rent(..))")//定义切点与增强类型
 public void beforeRent() {
  System.out.println("开始执行租赁动作");
 }
}

这个切面只是一个普通的 POJO,只不过加了 @Aspect 注解。

@Before("execution(* rent(..))") 中的 @Before 表示增强类型是前置增强,它的内容是 @AspectJ 切点表达式,这里表示的是在目标类的 rent() 方法上织入增强, rent() 可以包含任意入参和任意的返回值。

带  @Aspect 的类,通过注解与代码,将切点、增强类型和增强的横切逻辑整合到了一起,是不是很方便呀O(∩_∩)O哈哈~

单元测试:

AspectJProxyFactory factory = new AspectJProxyFactory();

//设置目标类
factory.setTarget(new User());

//添加切面类
factory.addAspect(PreRentAspect.class);

User proxy = factory.getProxy();
String userId = "001";
proxy.rent(userId);
proxy.back(userId);

输出结果:

--开始执行租赁动作--
User:租赁【充电宝】
User:归还【充电宝】

3 配置方式










单元测试:

ApplicationContext cOntext= new ClassPathXmlApplicationContext(spring.xml");
User user = (User) context.getBean("user");
String userId = "001";
user.rent(userId);
user.back(userId);

输出结果与编程方式完全相同。

也可以基于 Schema 的 aop 命名空间进行配置:

<&#63;xml version="1.0" encoding="UTF-8"&#63;>


 
 

 
 


 
 

这样的配置更加简洁。其实在 内部已经采用了自动代理模式啦 O(∩_∩)O哈哈~

proxy-target-class 属性,默认为 false ,表示使用 JDK 动态代理技术织入增强;此值为 true 则表示使用 CGLib 动态代理技术织入增强 。 如果目标类没有声明接口,那么即使  proxy-target-class 设置为 false,也会自动使用 CGLib 动态代理织入增强的哟O(∩_∩)O哈哈~

基于 Java5.0+ 的项目,建议使用 AspectJ 来配置切点与增强,因为这样更简洁、也更直接。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
舞动青春的迪斯科舞厅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有