• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 图解JAVA中Spring Aop作用

图解JAVA中Spring Aop作用

作者:再写三行 字体:[增加 减小] 来源:互联网 时间:2017-05-28

再写三行 通过本文主要向大家介绍了spring中的aop,spring中aop的作用,spring中ioc和aop,spring中aop是指,spring中aop的理解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

假如没有aop,在做日志处理的时候,我们会在每个方法中添加日志处理,比如

1

但大多数的日子处理代码是相同的,为了实现代码复用,我们可能把日志处理抽离成一个新的方法。但是这样我们仍然必须手动插入这些方法。

2

但这样两个方法就是强耦合的,假如此时我们不需要这个功能了,或者想换成其他功能,那么就必须一个个修改。

通过动态代理,可以在指定位置执行对应流程。这样就可以将一些横向的功能抽离出来形成一个独立的模块,然后在指定位置

插入这些功能。这样的思想,被称为面向切面编程,亦即AOP。

3

为了在指定位置执行这些横向的功能,需要知道指定的是什么地方

4

例如上图,方法级别的aop实现,在一个程序执行链条中,把method2称为切点,也就是说在method2执行时会执行横切的功能,那么是在method2之前还是之后呢,又是执行什么呢?这些都由advice(通知)来指定。advice有5种类型,分别是

通知类型 简介

Before(前置通知) 目标方法调用之前执行

After(后置通知) 目标方法调用之后执行

After-returning(返回通知) 目标方法执行成功后执行

After-throwing(异常通知) 目标方法抛出异常后执行

Around(环绕通知) 相当于合并了前置和后置

把切点和通知合在一起就是切面了,一个切面指定了在何时何地执行何种方法。在spring aop中如此定义这个切面:

@Aspect
@Component
public class UserAspect {

  @Before("execution(* com.aop.service.impl.UserServiceImpl.login(..))")
  public void loginLog(){
    System.out.println("user login");
  }

}
</div>

使用注解@Aspect将某个特定的类声明为切面,这样,该类下的方法就可以声明为横向的功能点后插入到指定位置。使用execution表达式声明在这个切点,格式如下

5

第一个位置指定了方法的返回值,*号代表任意类型的返回值,然后是所在的类和方法名,*号同样代表任意,就是该类中任意的方法,在上一个例子中方法名是login,则是指定了该类中的login方法。然后最后一个参数是方法入参,因为Java中支持重载,所以这个参数可以帮助你更精确的进行定位。两点表示任意参数类型。这样,execution表达式告诉了程序该在何地执行通知。而被诸如@Before注解修饰的方法就是通知的内容,也就是做什么。

至此,我们就可以使用spring aop,但是还有两点需要得到注意

将切面类声明为一个bean

切点指定的方法所在的类也同样需由spring注入才能生效

希望本篇文章对您有所帮助

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解Spring Boot中使用AOP统一处理Web请求日志
  • 图解JAVA中Spring Aop作用
  • 详解Spring Boot中使用AOP统一处理Web请求日志
  • 图解JAVA中Spring Aop作用

相关文章

  • 2017-05-28javaBean的基础知识及常见乱码解决方法
  • 2017-05-28java web开发中大量数据导出Excel超时(504)问题解决
  • 2017-05-28java实现二叉树的创建及5种遍历方法(总结)
  • 2017-05-28Java微信公众平台开发(6) 微信开发中的token获取
  • 2017-05-28java 基本算法之归并排序实例代码
  • 2017-05-28Spring Boot 使用Druid详解
  • 2017-05-28详解JAVA的封装
  • 2017-05-28详解在Spring Boot中使用Mysql和JPA
  • 2017-05-28springboot集成spring cache缓存示例代码
  • 2017-05-28java容器详细解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java集合框架LinkedList详解及实例
    • 全面解析SpringBoot自动配置的实现原理
    • 详解Spring中Bean的加载的方法
    • MyBatis简介与配置MyBatis+Spring+MySql的方法
    • 浅谈spring和spring MVC的区别与关系
    • java 中Map详解及实例代码
    • Java 内存模型
    • JAVAEE中用Session简单实现购物车功能示例代码
    • MyBatis框架简介
    • 浅谈将子类对象赋值给父类对象

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有