切面

springboot 切面添加日志功能

匿名 (未验证) 提交于 2019-12-02 23:57:01
1、新建一个springboot项目 2.定义个切面类,并指定切入点,获取所需记录信息(如:访问人IP, 访问地址,访问地址名称等) 3.新建数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for ds_access_log -- ---------------------------- DROP TABLE IF EXISTS `ds_access_log`; CREATE TABLE `ds_access_log` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `url_name` varchar(30) DEFAULT NULL COMMENT '接口名称', `url` varchar(255) DEFAULT NULL COMMENT '接口地址', `ip` varchar(30) DEFAULT NULL COMMENT '访问人IP', `user_name` varchar(10) DEFAULT NULL COMMENT '访问用户姓名', `add_date` datetime DEFAULT NULL COMMENT '访问时间', `status` tinyint(2) DEFAULT

spring֮AOP

匿名 (未验证) 提交于 2019-12-02 23:52:01
spring֮AOP springAop是什么? Aop的概念 核心 工具类 前置通知 后置通知 环绕通知 异常通知 springAop是什么? 切面编程,就是在你项目原有的功能基础上,通过AOP去添加新的功能,这些功能是建立在原有功能的基础上的,而且原有的功能并不知道你已经添加了新的功能。比如说,你去ATM取钱,取钱是一个功能,取完钱后向你的手机发送一条取钱信息,这就是新加的功能。 Aop的概念 1) Aspect :切面,切入系统的一个切面。比如事务管理是一个切面,权限管理也是一个切面; 2) Join point :连接点,也就是可以进行横向切入的位置; 3) Advice :通知,切面在某个连接点执行的操作(分为: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice ); 4) Pointcut :切点,符合切点表达式的连接点,也就是真正被切入的地方; 核心 AOP中关键性概念 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出. 目标(Target):被通知(被代理)的对象 注1:完成具体的业务逻辑 通知(Advice):在某个特定的连接点上执行的动作

Srping Boot 整合AOP面向切面编程--(日志系统处理)

匿名 (未验证) 提交于 2019-12-02 23:52:01
一、前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转。本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理。 二、什么是AOP? aop全称 Aspect Oriented Programming ,面向切面,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。其与设计模式完成的任务差不多,是提供另一种角度来思考程序的结构,来弥补面向对象编程的不足。   通俗点讲就是提供一个为一个业务实现提供切面注入的机制,通过这种方式,在业务运行中将定义好的切面通过切入点绑定到业务中,以实现将一些特殊的逻辑绑定到此业务中。   举个例子,项目中有记录操作日志的需求、或者流程变更是记录变更履历,无非就是插表操作,很简单的一个save操作,都是一些记录日志或者其他辅助性的代码。一遍又一遍的重写和调用。不仅浪费了时间,又将项目变得更加的冗余,实在得不偿失。   所以就需要面向切面aop就出场了。 三、关于AOP相关名词 要理解SpringBoot整合aop的实现,就必须先对面向切面实现的一些aop的名称有所了解,不然也是云里雾里。 切面(Aspect) :一个关注点的模块化。以注解@Aspect的形式放在类上方,声明一个切面。 连接点(Joinpoint)

切面反射获取方法

匿名 (未验证) 提交于 2019-12-02 23:47:01
Signature sig = pjp.getSignature();MethodSignature msig = null;if (!(sig instanceof MethodSignature)) { throw new IllegalArgumentException("该注解只能用于方法");}msig = (MethodSignature) sig;Object target = pjp.getTarget();Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());

Spring AOP

匿名 (未验证) 提交于 2019-12-02 23:47:01
面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足。在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面。切面能对关注点进行模块化,例如横切多个类型和对象的事务管理。(在AOP术语中通常称作横切(crosscutting)关注点。) AOP的基本概念 切面(Aspect) 一个关注点的模块化,是通知和切点的结合。通知和切点共同定义了切面的全部内容――它是什么,在何时和何处完成其功能。 连接点(Joinpoint) 连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。因为Spring基于代理实现AOP,所以只支持方法连接点。 通知(Advice) 在切面的某个特定的连接点上执行的动作。Spring切面可以应用5种类型的通知: 1 前置通知(Before):在目标方法被调用之前调用通知功能; 2 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么; 3 返回通知(After-returning):在目标方法成功执行之后调用通知; 4 异常通知(After-throwing):在目标方法抛出异常后调用通知; 5 环绕通知(Around):通知包裹了被通知的方法

spring源码分析之spring注解@Aspect是如何工作的?

匿名 (未验证) 提交于 2019-12-02 23:38:02
AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充。面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程。 AOP底层,就是采用动态代理模式实现的。采用两种代理:JDK的动态代理,与CGLIB的动态代理。JDK的动态代理是面向接口的,CGLIB既可以实现有接口的,又可以实现没有接口的。(对动态代理不了解的可以看看我的其关于动态代理的介绍) 面向切面编程,就是将交叉业务逻辑封装成切面,利用AOP容器的功能将切面植入到主业务逻辑中。所谓交叉业务逻辑是指:通用的,与主业务逻辑无关的代码,如安全检查,事务日志等。 @Aspect可以使用切点函数定义切点,我们还可以使用逻辑运算符对切点进行复核运算得到复合的切点,为了在切面中重用切点,我们还可以对切点进行命名,以便在其他的地方引用定义过的切点。当一个连接点匹配多个切点时,需要考虑织入顺序的问题,此外一个重要的问题是如何再增强中访问连接点上下文的信息。 1、@Aspect 在xml定义:<aop:aspectj-autoproxy />, 其定义在http://www.springframework.org/schema/aop/spring-aop-3.0.xsd - <xsd:element name="aspectj-autoproxy"> - <xsd

Spring-----------XML方式配置切面

匿名 (未验证) 提交于 2019-12-02 23:32:01
概述 除了使用AspectJ注解声明切面,Spring也支持在bean配置文件中声明切面。这种声明是通过aop名称空间中的XML元素完成的。 正常情况下,基于注解的声明要优先于基于XML的声明。通过AspectJ注解,切面可以与AspectJ兼容,而基于XML的配置则是Spring专有的。由于AspectJ得到越来越多的 AOP框架支持,所以以注解风格编写的切面将会有更多重用的机会。 配置细节 在bean配置文件中,所有的Spring AOP配置都必须定义在<aop:config>元素内部。对于每个切面而言,都要创建一个<aop:aspect>元素来为具体的切面实现引用后端bean实例。 切面bean必须有一个标识符,供<aop:aspect>元素引用。 声明切入点 切入点使用<aop:pointcut>元素声明。 切入点必须定义在<aop:aspect>元素下,或者直接定义在<aop:config>元素下。 定义在<aop:aspect>元素下:只对当前切面有效 定义在<aop:config>元素下:对所有切面都有效 基于XML的AOP配置不允许在切入点表达式中用名称引用其他切入点。 声明通知 在aop名称空间中,每种通知类型都对应一个特定的XML元素。 通知元素需要使用<pointcut-ref>来引用切入点,或用<pointcut>直接嵌入切入点表达式。

Spring中,关于IOC和AOP的那些事

匿名 (未验证) 提交于 2019-12-02 21:52:03
一、spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 二、什么是IOC(DI)? IOC,即控制反转(Inversion of Control),他与依赖注入(Dependecy Injection)是同一个概念。具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入。 它并不是一种技术实现,而是一种设计思想。在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能

Spring入门(十):Spring AOP使用讲解

匿名 (未验证) 提交于 2019-12-02 21:52:03
AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 可以认为AOP是对OOP(Object Oriented Programming 面向对象编程)的补充,主要使用在日志记录,性能统计,安全控制等场景,使用AOP可以使得业务逻辑各部分之间的耦合度降低,只专注于各自的业务逻辑实现,从而提高程序的可读性及维护性。 比如,我们需要记录项目中所有对外接口的入参和出参,以便出现问题时定位原因,在每一个对外接口的代码中添加代码记录入参和出参当然也可以达到目的,但是这种硬编码的方式非常不友好,也不够灵活,而且记录日志本身和接口要实现的核心功能没有任何关系。 此时,我们可以将记录日志的功能定义到1个切面中,然后通过声明的方式定义要在何时何地使用这个切面,而不用修改任何1个外部接口。 在讲解具体的实现方式之前,我们先了解几个AOP中的术语。 1.1 ֪ͨ(Advice) 在AOP术语中,切面要完成的工作被称为通知,通知定义了切面是什么以及何时使用。 Spring切面有5种类型的通知,分别是: 前置通知(Before):在目标方法被调用之前调用通知功能 后置通知(After):在目标方法完成之后调用通知,此时不关心方法的输出结果是什么 返回通知(After-returning)

Spring AOP中@Aspect 面向切面注解使用详解

匿名 (未验证) 提交于 2019-12-02 21:45:52
引言: 相关注解介绍如下: @Aspect:作用是把当前类标识为一个切面供容器读取 @Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。 @Around:环绕增强,相当于MethodInterceptor @AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行 @Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有 @AfterThrowing:异常抛出增强,相当于ThrowsAdvice 二:Spring的配置文件 applicationContext.xml 中引入context、aop对应的命名空间;配置自动扫描的包,同时使切面类中相关方法中的注解生效,需自动地为匹配到的方法所在的类生成代理对象。 3、创建简单计算器的接口ArithmeticCalculator.java及实现类ArithmeticCalculatorImpl.java package com