概念:

AOP——面向切面编程,通过预编译/动态代理实现程序功能的统一维护
主要功能是:日志、性能统计、安全控制、事务处理、异常处理

实现方式

  • 预编译——AspectJ
  • 动态代理——SpringAOP、JbossAOP

常用概念

  • Advice通知的类型

Spring的AOP实现

  • 纯Java实现,无需特殊编译,不需要控制类加载器
  • 只支持方法执行连接点
  • 目的是提供一种APO与SpringIOC之间的整合
  • 与AspectJ相比,SpringAOP并不全面

有接口和无接口的SpringAOP的区别(没看懂)

  • 有接口,默认使用标准JavaSErvice动态代理作为AOP代理
  • 无接口使用CGLIB代理

配置、切面实现、切入点,切入方式

Demo:
首先需要增加依赖包

在Spring.xml中配置切面

切入点

切面实现

带参切入方法实现

测试类

带参切入点测试结果

Introductions引入

  • 简介允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现来代表这些对象
  • 由 aop:aspect 中的 aop:declare-parents 元素声明该元素用于声明所匹配的类型拥有一个新的parent
    例如:有个Service提供server服务,想在不更改Service代码的前提下对该Service增加验证,即可以定义一个接口和实现,再通过Introductions为Service增加新的接口,使Service可以通过验证后再执行server
    Demo:
    声明一个接口,并提供实现

想要引入的类

配置

Test方法

执行结果

advisor

  • 就像一个小的自包含的方面,只有一个advice
  • 切面自身通过一个bean表示,并且必须实现某个advice接口,同事,advisor也可以很好的利用AspectJ的切入点表达式
  • Spring通过配置文件中的aop:advisor 元素支持advisor 实际使用中大多数情况下他会和transactional advice配合使用
  • 为了定义一个advisor的优先级以便让advice可以有序,可以使用order属性来定义advisor的顺序
    例如:该标签只是切入的另一种方式,只需要配置切入点和实现了通知接口的类即可实现切面
    Demo:
    配置

实现了Advice接口的实现类

切入点测试调用方法

测试

结果

JavaSpring【五、AOP基础】的更多相关文章

  1. [Spring框架]Spring AOP基础入门总结一.

    前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...

  2. [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

    前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...

  3. CgLib动态代理学习【Spring AOP基础之一】

    如果不了解JDK中proxy动态代理机制的可以先查看上篇文章的内容:Java动态代理学习[Spring AOP基础之一] 由于Java动态代理Proxy.newProxyInstance()的时候会发 ...

  4. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  5. 2017-2018-2 20155225《网络对抗技术》实验五 MSF基础应用

    2017-2018-2 20155225<网络对抗技术>实验五 MSF基础应用 ms08_067 用search命令,搜索与ms08_067相关的模块,如图: 找到了对应的攻击模块expl ...

  6. 20155201 网络攻防技术 实验五 MSF基础应用

    20155201 网络攻防技术 实验五 MSF基础应用 一.实践内容 一个主动攻击实践,如ms08_067 一个针对浏览器的攻击,如ms11_050 一个针对客户端的攻击,如Adobe 成功应用任何一 ...

  7. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  8. 五. Python基础(5)--语法

    五. Python基础(5)--语法 1 ● break结束的是它所在的循环体, continue是让它所在的循环体继续循环 # 打印: 1 10 2 10 3 10 4 10 5 10 6 10 7 ...

  9. 20155222卢梓杰 实验五 MSF基础应用

    实验五 MSF基础应用 1.一个主动攻击实践,如ms17_010_eternalblue漏洞; 本次攻击目标是win7虚拟机 首先进行相应配置 然后点launch 就成功了 针对win7的漏洞还是相对 ...

  10. 20155235 《网络攻防》 实验五 MSF基础应用

    20155235 <网络攻防> 实验五 MSF基础应用 实验内容 一个主动攻击实践,如ms08_067; (1分) 一个针对浏览器的攻击,如ms11_050:(1分) 一个针对客户端的攻击 ...

随机推荐

  1. scikit-learn机器学习(三)多项式回归(二阶,三阶,九阶)

    我们仍然使用披萨直径的价格的数据 import matplotlib matplotlib.rcParams['font.sans-serif']=[u'simHei'] matplotlib.rcP ...

  2. JAVA 基础编程练习题24 【程序 24 根据输入求输出】

    24 [程序 24 根据输入求输出] 题目:给一个不多于 5 位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. package cskaoyan; public class cskaoya ...

  3. 看看可爱c#中的delegate(委托)和event(事件)用法好不好

    一.开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那.好了,那今天就趁月黑风高的夜晚简单来谈谈delegate和e ...

  4. WordPress创建多个page页面模板文件

    一般我们使用WordPress创建多个page页面模板文件,有两种方法: 一种是,创建page-$id.php文件 这样的文件是通过WordPress默认的链接查询来创建page页面模板文件,就是使用 ...

  5. DB2的web可视化客户端工具

    DB2 是IBM公司的产品,目前在银行等金融行业还在大量使用, DB2的客户端工具太,并且难用,这是一直为人所垢病的,  现在TreeSoft数据库管理系统已支持DB2了,直接在浏览器中就可以操作查看 ...

  6. 微信小程序textarea层级过高(盖住其他元素)

    根据官方文档,textarea 是原生组件 (https://developers.weixin.qq.com/miniprogram/dev/component/textarea.html),所谓原 ...

  7. Guava源码阅读-collect-Multiset

    package com.google.common.collect; 我们在进行字符统计时,同常采用的方法就是: String[] text=new String[]{"the weathe ...

  8. codevs 1163:访问艺术馆

    题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精 ...

  9. JS对字符串的操作,截取

    substring()  //一个参数的时候是从那个参数到字符串结束的位置: substring(start,stop)        //substring是对字符串两个索引之间的值进行截取: 要注 ...

  10. 【HDU】6242-Geometry Problem

    今天忽然心血来潮打开牛客网尝试了一下一站到底 前四道题都是不到二十分钟切完,然后第五道来了道计算几何 我也不会啊,于是就觉得大力随机也许可行 然鹅被精度卡到崩溃 后来我才知道 保证有解,是保证你的精度 ...