Spring AOP学习笔记(1):AOP基础知识

一、 使用AOP前的经验

在接触AOP这种编程思想之前,我也有好多的编码经历,将业务逻辑和日志、测试和验证等其他需求放在一起的,这简直是痛苦死了,每写一个方法都得重复好多代码,而且这些代码有好多是类似的,但是不得不重写,因为当时还是菜鸟(现在也是菜鸟 安静),比如之前同组的师兄开发了一个小工具,由于我是刚进组,便把测试的工作交给我了,我傻傻的写了类似下面的这段代码:
/*...*/
int a = System.currentTimeMillis();
/* function */
int b = System.currentTimeMillis();
/*...*/
int time = b - a;
以及后来做其他工作时,比如说日志,在程序运行开始和结束后反映程序运行的状态,都和上面做的功能类似。知道后来接触到Spring之后才知道AOP这种的东西,但是要说明的是Spring和AOP之间并没有必然联系,只是Spring支持AOP而已,开始的时候看网上大家谈AOP必说Spring,所以我按照我的想法说明一下。

二、 AOP之我的理解

之前初次看到AOP,什么面向切面编程,太学术化了,还有那些术语,什么连接点、横切面,整的我晕头转向,一点都不明白,后来在网上看到一张图片,稍微有点明白了。

其中的面条就是我们的主要的业务逻辑,其他的各种调料就是其他的繁琐的小功能,其中意味大家都能体会得到。这种面向切面在我理解类似于汉堡,在肉的外面夹了很多其他的东西,但是我们主要的目的是吃肉(对于我来说啦),但是你不能把外面的面包和蔬菜全都绞碎放到肉里面,每一个种类的食物都可以看成一种琐碎的功能,比如面包是验证、番茄酱是测试、薯条是日志等等。
重要术语解释(以下均是自己的理解):
  • 通知(Advice):还是看英文吧,中文我不知道怎么翻译过来的,简单来说就是你希望在业务逻辑上加什么东西,需要增强的功能,可以类比于Java中InputStream和BufferedInputStream之间的关系,那个buffered类似于Advice;
  • 目标(Target):被Advice的对象,可以同上类比为InputStream,即被包装的功能,如果拿汉堡比较,就是那块肉;
  • 切点(Pointcut):切点一开始怎么也理解不明白,这到底是个什么玩意,后来才弄明白,这可以看成Advice怎么做到通知Target,是通过一种条件,这种条件就是切点,还可以类比,正则表达式匹配字符串,正则表达式就类似于切点,用来找到对应的字符串;
  • 代理(Proxy):在Target被Advice后会生成一个新的对象,生成的对象类似于BufferedInputStream这种,即将业务逻辑和增强的功能融合到一起之后生成的新的对象,这是通过Java中的动态代理技术实现的;
  • 连接点(Joinpoint):我老是把连接点和目标弄混,这次我试着把他们解释明白,连接点说白了就是目标和通知的结合部,比如Advice在Target前,在Target后,或者在Target出问题时,包括两个东西:一个是连接的位置,说明Advice在哪里和Target连接;另一个就是程序执行点,我的理解,也就是连接后Target要执行的方法或者相应的代码段;
  • 切面(Aspect):可以说这是一个模块,我的理解是,它包括Advice和切点,它们被封装在一起形成一个模块,与业务逻辑是独立的,即形象的说,在汉堡中一类蔬菜就是一个切面,它可以放在汉堡中,也可以放在三明治中,切面就是这类蔬菜,当然如果你想,可以把这类蔬菜放在任何位置。

三、 AOP实现

  • 动态代理手动实现:由于AOP这种思想是通过Java反射的动态代理来实现的,但是每次都是自己手动实现太累了,也没必要,关键是我们懒了;
  • AspectJ:应该是Java中最受欢迎的AOP框架;AspectJ官方网站
  • 其他:还有些其他的框架,我本人不太了解,身边的人也没有在用的,比如:AspectJWerkz、Jboss AOP、Spring AOP等。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值