详解SpringAopAspectJ注解方式和xml方式及传参问题

      前言:最近研究Spring框架的Aop功能是研究的如痴如醉,Aop,面向切面编程,是一种思想,是面向对象编程(OOP)的一个补充。因为传统的OOP是自顶向下的,业务是垂直结构,但是总有一些功能穿插在这些功能之中,经常要复用,比如日志,Aop就是为了解决这个问题来的。那么java在实现Aop的时候,有两种方式,AspectJ和Sechma Based。Sechma Based在配置xml文件的时候比较简单,我们就直接略过。AspectJ又可分为配置xml文件和使用注解两种方式。不幸的是,这两种方式我一开始走的都不太顺利,不过折腾了几天总算解决了,特此记录一下。
先说一下我的版本,因为我后面要讲两个错误,很多人说他们出现相同的错误是因为版本问题导致的,我试过改变版本,然并卵,最终发现还是代码问题。
版本:JDK 1.8+Spring 5.0.10+AspectJWeaver 1.9.7+AopAlliance 1.0
方式一:AspectJ xml 方式
1.首先创建一个切点类AopDemo,类里面给个方法Start,需要name和age参数
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
2.然后新建一个切片类AopAspect,里面写上所有能用到的通知
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
3.配置xml文件,前提是已经引入了xml的命名空间:xmlns:aop,也已经导了jar包
详解SpringAopAspectJ注解方式和xml方式及传参问题

注意框红线的地方是如何传参的,下面的before after around 等都是简写,全写是这样的
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
所以,简写只是省去了arg-names参数而已。
4.测试
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
至此,方式一 AspectJ xml方式就写完了,中间还遇到过一个问题:
java.lang.IllegalArgumentException: warning no match for this type name
这个问题我折腾了好久,纠其原因还得回到第二步,细心的读者应该发现了,我只在before用到了name和age参数,其他方法里都没用到,所以最开始的时候其他方法里我并没有声明这个两个参数,那就会报这个错。 所以,一旦你要传参,那就必须所有声明的通知中都要去接收这些个参数。
方式二:AspectJ 注解方式
其实这是官方主推的方式了,比较新的Spring框架都是先讲这种方式。
1.配置xml扫描注解所在的包,以及,开启cglib动态代理
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
2.创建切点类,配置 @Component 和 @Pointcut
详解SpringAopAspectJ注解方式和xml方式及传参问题

注意:这里我配置了两个切点,一个是Start,无参;一个Start2,有参。
3.创建通知类,设置前置后置等,注意红框标注的地方是关键
详解SpringAopAspectJ注解方式和xml方式及传参问题
 
4.测试
详解SpringAopAspectJ注解方式和xml方式及传参问题

详解SpringAopAspectJ注解方式和xml方式及传参问题
 
在做这个例子的过程中我也同样遇到了问题,很多人也遇到过这个问题,那就是
java.lang.IllegalArgumentException: error at ::0 incompatible number of arguments to pointcut, expected 1 found 0
这个问题和我们在上面方式一遇到的问题的原因是类似的,那就是一旦切点声明了参数,那么后面的所有通知就必须也得有参数,不能before有参数,after没参数。
总结:AspectJ的xml和注解方式都必须遵循一个原则, 那就是一旦切点声明了参数,那么后面所有的通知,都必须有参数,才能接收到值,否则就会报错,但是报的错是不一样的,只不过引起的原因是一样的。
最近这段时间倒是挺充实的,不断在学习新知识。了解了java的几大框架,
SSH(Spring Structs Hibernate)
SSM(Spring SpringMVC Mybatis)
Spring Boot   
Spring Cloud
Spring Boot现在应该是算是最火的框架了吧,等我把Spring MVC拿下了,就去研究研究,我估计Spring MVC 应该和 Asp.net/core MVC 差不多,Spring Coud 据说是微服务框架,有时间了可以玩一玩。最后吐槽一下我们公司的开发模式,还没有做到前后盾分离。。。,都1202年了,还在前后端一起玩,居然还在用IDEA这么重量级的软件写js,也是醉了。Spring MVC怎么就不能前后端分离,只要有一个人,把程序发布出来,所有的前端都去调那个人的接口,不就OK了么,真是死脑筋。
就这样吧,回见~~~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIGIS.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值