对Spring的AOP的理解

110 阅读2分钟

昨天我们谈了谈对spring ioc的理解,ioc在我们的日常使用中对程序员的帮助还是很大的,方便我们进行开发动作,今天我们来聊聊aop,我们在开发的过程中经常需要去实现对象增强,这个的话使用AOP就可以实现。

个人理解:

Spring AOP :解决的是非业务代码抽取的问题。AOP 底层的技术是动态代理,在Spring内实现依赖的是BeanPostProcessor。

例如:我们需要在一些方法上注入些重复性的非业务代码,这时就能利用Spring AOP来解决问题,所谓的‘面向切面编程’ 在我的理解下其实就是在方法前后增加非业务代码 image.png

当时我就是利用aop来对公司项目的一些相关接口和事务进行统一管理的,如果调用接口后,报错了,查看日志的时候能很快定位到那个接口报错。我利用注解+AOP的方式封装了一把,只要方法/类上带有我自定义的注解,当方法被调用时,就会在日志中输出xx接口开始调用,结束之后会打印xx接口调用结束,用时xx秒,来实现了非业务代码与业务代码分离的效果。

Spring bean的生成方式:

Spring提供了4种方式,分别是:1):注解 2):XML 3):JavaConfig 4):基于Groovy DSL配置。

一般项目我们用注解或XML比较多,少部分用JavaConfig,日常写业务代码一般用注解来定义各种对象,责任链这种一般配置在XML,注解解决不了的就用JavaConfig。不过总体而言,还是得看项目的代码风格吧,反正就是定义元数据,能给到Spring解析就好了。

image.png

初始接触到Spring的时候,我觉得Spring很麻烦,因为它需要进行一大堆的配置信息才能跑起来,光是搭建环境就需要耗费好长的时间,解决一个依赖冲突啊什么的可能一下午时间就这么过去了,但要是搭建好了,后面用起来那是真的方便,而且现在也有了SpringBoot的出现,这又减少了很多配置信息,更加方便开发了。

毕竟搞个注解什么的,配置下就可以把对象交给Spring管理了,配合Spring的生态,@Transactional注解什么的,那都是非常好用的,不过,Spring给我们封装得太好了,经常就会有奇奇怪怪的”bug“出现,也踩过很多的坑了,Bean经常没办法创建成功,导致项目启动失败、对象的循环依赖等等问题…

但总的来说,Spring给我们封装了一个很好的环境,方便了我们的开发,省去了很多不必要的麻烦。