java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

Spring AOP理解

Oriented: 以什么为方向的

Aspect: 方面,切面,特色,朝向

AOP:Aspect Oriented Programming,即面向切面编程。

OOP:Object Oriented Programming,OOP作为面向对象编程的模式,获得了巨大的成功,OOP的主要功能是数据封装、继承和多态。

OOP把系统切分为各个对象,客户,商品,购物车,关注对象。AOP把系统分解为不同的关注层面,比如日志,登录验证,事务处理,系统缓存加速。

尽管系统需要处理自己的独立对象,比如购物中的GoodsService关注商品,UserService关注用户,但是这些系统都需要一个共同的切面Log

OOP编程的问题

比如商品服务GoodsService包含的三个方法

createGoods

updateGoods

deleteGoods

public class GoodsService {
    public void createGoods(Goods goods) {
        securityCheck();
        try {
            // 核心业务逻辑
            tx.commit();
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        }
        log("created goods: " + goods);
    }

     public void updateGoods(Goods goods) {
        securityCheck();
        try {
            // 核心业务逻辑
            tx.commit();
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        }
        log("updated goods: " + goods);
    }
}

这些代码里重复出现权限检查和日志记录

我们不如把权限检查和日志看做一个切面,来统一解决就好了。这样GoodsService关注自己的商品逻辑就可以了。

AOP解决方案

当系统调用了GoodsSerivice.createGoods()方法的时候,系统自动拦截,进行权限检查,日志处理

Java平台AOP有三种方案

  • 编译期:编译期自动扩展,调用编译器,把代码织入
  • 类加载器:目标类装载到了JVM里通过特俗的类加载器,对目标字节码增强
  • 运行期:JVM动态代理

Spring AOP的本质是动态代理,如果没有接口,要用到CGLIB

Spring AOP和AspectJ是什么关系

AspectJ是一个java实现的AOP框架,它能够对java代码进行AOP编译(一般在编译期进行),让java代码具有AspectJ的AOP功能(当然需要特殊的编译器)

Spring AOP 支持对XML模式和基于@AspectJ注解的两种配置方式。

在Spring项目采用AOP编程,可以使用Spring AOP或者AspectJ两种的一种。AspectJ 性能更好,支持功能更强大,Spring AOP较为简单,容易上手。

好处:AOP技术的优势使得需要编写的代码量大大缩减,节省了时间,控制了开发成本。同时也使得开发人员可以集中关注于系统的核心商业逻辑。此外,它更利于创建松散耦合、可复用与可扩展的大型软件系统。

参考资料

https://blog.csdn.net/qq_43842093/article/details/121803976

https://pdai.tech/md/spring/spring-x-framework-aop.html

https://www.cnblogs.com/cxuanBlog/p/13060510.html

https://www.liaoxuefeng.com/wiki/1252599548343744/1266265125480448


This entry was posted in JAVA. Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/spring-aop/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply