maven aspectj_使用Spring AspectJ和Maven进行面向方面的编程

本文介绍了如何在Spring框架中利用AspectJ进行面向方面的编程,以克服Spring AOP的限制。通过Maven和AspectJ的编译时编织,可以直接将方面逻辑注入到目标类中,避免了代理的限制。文中详细阐述了如何设置Eclipse环境、创建Maven项目、配置POM文件,以及创建Spring服务和AspectJ方面。最终,展示了如何构建和部署应用,实现了方法调用的拦截和增强。
摘要由CSDN通过智能技术生成

maven aspectj

Spring框架附带AOP支持。 实际上,如Spring参考文档中所述

Spring的关键组件之一是AOP框架。 尽管Spring IoC容器不依赖于AOP,这意味着您不需要使用AOP,但AOP是对Spring IoC的补充,以提供一种功能强大的中间件解决方案。 AOP在Spring框架中用于…

  • …提供声明性企业服务,尤其是代替EJB声明性服务。 此类服务中最重要的是声明式事务管理。  
  • …允许用户实现自定义方面,并通过AOP补充其对OOP的使用。

尽管如此,与完整的AOP实现(例如AspectJ)相比, Spring AOP框架还是有某些限制。 人们在使用Spring AOP框架时遇到的最常见问题源于Spring AOP是“基于代理的”这一事实。 换句话说,当将bean用作依赖项,并且应根据特定方面建议其方法时,IoC容器将注入“方面感知” bean代理,而不是bean本身。 对用户透明地对代理bean实例执行方法调用,以便在将调用委派给实际的“代理” bean之前和/或之后执行方面逻辑。

此外, Spring AOP框架使用JDK动态代理或CGLIB创建给定目标对象的代理。 第一个只能为接口创建代理,而第二个可以代理具体类但有一定限制。 特别是,如Spring参考文档中所述

如果要代理的目标对象实现了至少一个接口,则将使用JDK动态代理。 目标类型实现的所有接口都将被代理。 如果目标对象未实现任何接口,则将创建CGLIB代理。

总而言之,在使用Spring AOP框架时,您应该牢记两个重要事项:

  1. 如果您的“代理” bean实现了至少一个接口,则只能将代理bean强制转换为该接口。 如果尝试将其强制转换为“代理” bean类,则应期望在运行时引发ClassCastException。 尽管如此, Spring AOP框架提供了强制CGLIB代理的选项,但有上述限制(请参阅Spring参考文档的相关章节)
  2. 方面不适用于术中呼叫。 这意味着代理无法拦截来自相同“代理” bean的另一个方法的方法的调用

我们建议克服以上问题的方法是使用AspectJ编织。 换句话说,将方面逻辑直接注入到目标类中,并消除了代理所有方法的必要性。 有三种方法可以注入AspectJ方面所隐含的指令:

  1. 编译时间编织–通过AspectJ编译器编译目标源或方面类
  2. 编译后编织–向已编译的类注入方面指令
  3. 加载时间编织–在类加载期间将方面指令注入字节码

可以使用上述任何方法。 在本教程中,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值