7 AOP

作者: 奉先 | 来源:发表于2019-05-24 17:18 被阅读0次

Java类通过继承机制可以纵向抽象出一些共用的代码,减少程序的代码量。AOP(面向切面编程)解决的是横向抽象的问题,把业务逻辑从一些非常“固定”的代码中抽取出来(例如:开启、关闭事务;开启、关闭监控等)。
一个类或者程序具有一些边界性质的特定点(例如类中的方法),叫做连接点(JoinPoint)。AOP通过“切点”(PointCut)来定位特定的连接点。
增强(Advice)是织入目标类连接点上的一段代码,除了描述代码外还包含用于定位连接点的方位信息。目标对象(Target)是增强逻辑织入的目标类。引介(Introduction)是一种特殊增强,为类增加一些属性和方法。
织入(Weaving)是将增强添加到目标类的具体连接点上的过程,包括编译期织入、类装载期织入、动态代理织入。一个类被织入增强后,就产生一个结果类,融合原类和增强逻辑的代理(Proxy)类。
切面(Aspect)由切点和增强(引介)组成。
AOP的工作包括: 如何通过切点和增强定位到连接点上;如何在增强中编写切面的代码。AOP的实现者包括 AspectJ、Spring AOP等。

spring AOP有两种代理机制,一种是基于JDK的动态代理,一种是基于CGLib的动态代理。下面使用一种简单的方式实现,ForumServiceImpl.java

public class ForumServiceImpl implements ForumService {
    public void removeTopic(int topicId) {
        PerformanceMonitor.begin("com.smart.proxy.ForumServiceImpl.removeTopic");
        System.out.println("模拟删除Topic记录:" + topicId);

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        PerformanceMonitor.end();
    }
    public void removeForum(int forumId) {
        PerformanceMonitor.begin("com.smart.proxy.ForumServiceImpl.removeForum");
        System.out.println("模拟删除论坛" + forumId);

        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        PerformanceMonitor.end();
    }
}

运行业务代码时,需要添加PerformanceMonitor的begin和end方法,破坏了业务完整性,可以使用代理方法来实现抽取业务逻辑。

相关文章

  • Spring面向切面编程(AOP)

    简书日更 第7篇: 重新学习Spring面向切面编程(AOP)相关知识 什么是AOP Spring AOP and...

  • 7 AOP

    Java类通过继承机制可以纵向抽象出一些共用的代码,减少程序的代码量。AOP(面向切面编程)解决的是横向抽象的问题...

  • spring-aop

    aop概念aop概念aop术语AOP实现方式1、spring-aop(使用xml文件实现AOP)2、AspectJ...

  • [Guice] 7 Guice Aop

    Guice中的Aop,通常是结合自定义注解实现。 以实现一个日志打印的切面注解为例:1、自定义注解 2、在modu...

  • Spring-7-AOP

    概述 分类 Spring-仅方法JDK:动态代理-ProxyGeneratorCGLib:字节码生成器-Class...

  • 7. AOP(一)

    spring源码学习笔记,要点归纳和代码理解 前言 Aop是Spring提供的的另一个核心功能,本节将探讨以下几个...

  • 谈谈移动开发编程中的AOP(剖面编程)

    目录 AOP的由来 什么是AOP? AOP与设计模式AOP与BridgeAOP与Dynamic-Proxy AOP...

  • spring-aop基础学习

    Spring AOP基础 AOP 1.什么是AOP AOP(Aspect Oriented Programming...

  • AOP概述-术语

    AOP概念-术语 什么是AOP AOP Aspect Oriented Programing 面向切面编程 AOP...

  • [java][SpringAOP]

    为什么会有AOP 实现AOP原理 AOP通知类型 AOP在Spring中配置

网友评论

      本文标题:7 AOP

      本文链接:https://www.haomeiwen.com/subject/kmjnzqtx.html