AspectJ 是通过注解来描述切点与增强的。
1 开发环境要求
因为要使用注解,所以请确保使用的 Java5.0 及以上版本。
引入 AspectJ 相关类库:
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> <version>${aspectj.version}</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>${aopalliance.version}</version> </dependency>
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 配置方式
<!-- 目标类--> <bean id="user" class="net.deniro.spring4.aspectj.User"/> <!-- 切面类--> <bean class="net.deniro.spring4.aspectj.PreRentAspect"/> <!-- 自动创建代理--> <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>
单元测试:
ApplicationContext context = new ClassPathXmlApplicationContext(spring.xml"); User user = (User) context.getBean("user"); String userId = "001"; user.rent(userId); user.back(userId);
输出结果与编程方式完全相同。
也可以基于 Schema 的 aop 命名空间进行配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--aspectj 驱动器 --> <aop:aspectj-autoproxy/> <!-- 目标类--> <bean id="user" class="net.deniro.spring4.aspectj.User"/> <!-- 切面类--> <bean class="net.deniro.spring4.aspectj.PreRentAspect"/> </beans>
这样的配置更加简洁。其实在 <aop:aspectj-atuoproxy/> 内部已经采用了自动代理模式啦 O(∩_∩)O哈哈~
<aop:aspectj-atuoproxy/> 的 proxy-target-class 属性,默认为 false ,表示使用 JDK 动态代理技术织入增强;此值为 true 则表示使用 CGLib 动态代理技术织入增强 。 如果目标类没有声明接口,那么即使 proxy-target-class 设置为 false,也会自动使用 CGLib 动态代理织入增强的哟O(∩_∩)O哈哈~
基于 Java5.0+ 的项目,建议使用 AspectJ 来配置切点与增强,因为这样更简洁、也更直接。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解Spring Aop实例之AspectJ注解配置,包括了详解Spring Aop实例之AspectJ注解配置的使用技巧和注意事项,需要的朋友参考一下 上篇《Spring Aop实例之xml配置》中,讲解了xml配置方式,今天来说说AspectJ注解方式去配置spring aop。 依旧采用的jdk代理,接口和实现类代码请参考上篇博文。主要是将Aspect类分享一下: applic
本文向大家介绍详解spring中使用solr的代码实现,包括了详解spring中使用solr的代码实现的使用技巧和注意事项,需要的朋友参考一下 在介绍solr的使用方法之前,我们需要安装solr的服务端集群。基本上就是安装zookeeper,tomcat,jdk,solr,然后按照需要配置三者的配置文件即可。由于本人并没有具体操作过如何进行solr集群的搭建。所以关于如何搭建solr集群,读者可以
这是一个已知的问题,因为Spring AOP使用的是基于代理的方法,该方法不会“看到”同一个类中的内部调用。显然我可以通过使用AspectJ而不是Spring AOP来解决这种情况。如果我没有理解错的话,它可以从Spring内部进行配置。从我的发现来看,我应该包含注释来配置Spring使用AspectJ而不是自己的AOP。不幸的是,这没有帮助,在添加注释之后,没有发生对被注释的方法的拦截。 Spr
7.7. 在Spring应用中使用AspectJ 到目前为止本章讨论的一直是纯Spring AOP。 在这一节里面我们将介绍如何使用AspectJ compiler/weaver来代替Spring AOP或者作为它的补充,因为有些时候Spring AOP单独提供的功能也许并不能满足你的需要。 Spring提供了一个小巧的AspectJ aspect library (你可以在程序发行版本中单独使用
希, 读了很多关于Spring AOP vs AspectJ的文章,我还是有些疑惑: 谢谢
本文向大家介绍详解如何在Android中实现悬浮Activity,包括了详解如何在Android中实现悬浮Activity的使用技巧和注意事项,需要的朋友参考一下 通常来说,为一款已经优化过的手机APP开发平板的版本也不是很难。使用Fragment、decompose Entities等组件就可以又快又轻松地完成。但是,最近遇到一个项目就没有这么简单了。我们不只要开发一个平板APP(基于Actio