• 4.AOP


    1.代理模式

    代理模式(Proxy Pattern)是GoF23种常用设计模式之一
    使用代理模式创建代理对象,让代理对象控制目标对象的访问,并且可以在不改变目标对象的情况下添加一些额外的功能
    包括静态代理、动态代理。

    静态代理:

    静态代理实现:
    代理对象与被代理对象必须实现同一个接口,在代理对象中实现日志等服务
    问题:
    代理对象的一个接口只服务于一种类型的对象
    如果要代理的方法很多,要为每种方法进行代理
    静态代理在程序规模稍大时无法胜任

    动态代理 :

    JDK1.3之后加入了实现动态代理的API
    InvocationHandler接口
    关键:使用Proxy.newProxyInstance()静态方法建立一个代理对象(建立代理对象必须告知要代理的接口)
    操作代理对象时会执行invoke()方法。

    2.AOP概述

    AOP简介:

    AOP( Aspect-Oriented Programming ,面向切面编程)
    提供了一种新的组织程序结构的思路
    是对OOP的补充,而不是替代,经常和OOP一起使用
    OOP的核心单位是类,而AOP则是切面
    典型的例子包括日志、验证、事务管理等
    优点:
    使开发人员集中关注于系统的核心业务逻辑
    更利于创建松散的、可复用、可扩展的软件系统

     AOP概念:

    关注点(concern):
    一个关注点可以是一个特定的问题、概念或者程序要达到的一个目标。比如日志记录等都是关注点。如果一个关注点的代码被多个类或方法引用,这个关注点就被称为横切关注点
    切面(aspect):
    一个切面是对一个横切关注点的模块化
    连接点(joinpoint):
    程序执行过程中的某个点,如方法调用或者抛出异常等

    通知(advice):
    在特定的连接点应该执行的动作,在多数AOP框架中,通知都是由拦截器实现的,Spring AOP也是如此(定义何时)
    切入点(pointcut):
    定义在哪些连接点处使用通知,在应用中一般通过指定类名、方法名或者匹配类名、方法名的正则表达式来指定切入点(何地)
    目标对象(target):
    被切面所通知的对象
    织入(weaving):
    将切面应用到目标对象,从而创建新的代理对象

     通知类型:

    前置通知(Before advice):
    在某连接点之前执行的通知
    后置通知(After returning advice):
    在某连接点正常完成后执行的通知
    异常通知(After throwing advice):
    在方法抛出异常退出时执行的通知
    最终通知(After finally advice):
    当某连接点退出的时候执行的通知
    环绕通知(Around advice):
    包围一个连接点的通知,这是最强大的一种通知类型

    3.Spring AOP

    Spring AOP介绍:

    Spring AOP是由纯Java语言实现
    Spring AOP和其他AOP框架不同,目的并不是提供最完整的AOP,目前仅支持方法执行上的连接点;但是他和Spring的IoC集成紧密,可以帮助解决企业应用中的常见问题
    当Spring AOP不能满足我们的需求时,可以采用其他AOP框架,比如AspectJ,Spring框架可以很好的集成诸如AspectJ等框架,他们是互补的

     Spring AOP实现:

    Spring AOP提供了3种实现方式:
    实现SpringAPI的传统方式
    纯POJO类(Advice不用实现任何接口)
    一种基于Schema的XML配置,用<aop>标签
    一种基于注解驱动的切面
    使用AspectJ切面

    实现Spring AOP的传统方式:

    经典的基于代理的AOP,适用于所有版本
    实现步骤:
    编写通知
    编写切点
    Spring自动创建代理对象

    纯粹POJO方式-基于Xml

    Spring2.x以后提供了新的aop的命名空间
    来定义切面等内容
    通知不需要实现特定的接口
    切面都集中在xml文件中,更加集中、清晰

    纯粹POJO方式-基于Annotation
    @AspectJ 是一种使用普通Java类注解
    来声明AOP切面的方式
    开启@AspectJ支持
    开启Java的配置方式:@EnableAspectJAutoProxy
    开启Xml的配置方式:<aop:aspectj-autoproxy />

  • 相关阅读:
    实现选中复制时不触发点击事件
    git忽略文件权限
    ubuntu 多版本php
    you have held broken packages
    linux ifconfig ip地址错误
    linux 系统设置屏幕分辨率
    linux addr2line 用于定位程序崩溃使用
    启动报Interrupted function call:accept failed
    系统下载网站
    1 什么是Lambda表达式 look
  • 原文地址:https://www.cnblogs.com/Firesun/p/9909923.html
Copyright © 2020-2023  润新知