aop

springboot整合aop全局日志管理

与世无争的帅哥 提交于 2020-01-15 13:19:21
1.引入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency> 2.aop日志类 @Log4j2 @Aspect @Component public class WebLogAspect { @Pointcut("execution(public * io.renren.controller.*.*(..))") public void logCut() { } @Before("logCut()") public void doBefore(JoinPoint joinPoint) { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

AspectJ - Static inter-type declaration on classes implementing a given interface

醉酒当歌 提交于 2020-01-15 11:55:06
问题 I would like to know if it is possible (and how if it is...) to make a static inter-type declaration that works on all classes that implements a given interface. In my use case, I have an empty interface: public interface Delegate {} and two classes implementing it: public class DelegateA implements Delegate {...} public class DelegateB implements Delegate {...} And I want an aspect to declare a static member on DelegateA and DelegateB... and all the future classes that will implements my

Spring中的AOP

蹲街弑〆低调 提交于 2020-01-15 05:02:15
概念 连接点(Join Point):业务层接口都是连接点 切入点(Point Cut):不需要被增强的方法 所有的切入点都是连接点,但不时所有的连接点都是切入点 前置通知:被执行方法前 后置通知:被执行方法后 异常通知:异常 最终通知:finally里中的 环绕通知:整个通知过程 spring中基于xml的AOP配置步骤 1、把通知Bean也交给spring来管理 2、使用aop:conf标签表明开始AOP配置 3、使用aop:aspect标签表明配置切面 id属性,是给切面提供一个唯一标识 ref属性,是指定通知类bean的ID 4、在aop:aspect标签的内部使用对应标签来配置通知的类型,before、after等等 5、pointcut属性,用于指定切入点表达式,该表达式的含义是对业务层中的哪些方法进行增强。 6、切入点表达式写法: 关键字:execution(表达式) 表达式: 修饰符 返回值 包全限定名.方法名(参数) execution( void com . lingmou . service . IUserServiceImpl . login ( ) ) 返回值可以省略,返回值可以用通配符*,表示任意返回值 execution( * com . lingmou . service . IUserServiceImpl . login ( ) )

SpringBoot防止表单重复提交AOP

大城市里の小女人 提交于 2020-01-15 04:38:39
import java.util.Objects; import javax.servlet.http.HttpServletRequest; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Aspect @Component public class NoRepeatSubmitAop { Logger logger = LoggerFactory

Spring Framework--AOP(1)--

蹲街弑〆低调 提交于 2020-01-15 04:25:09
一、简介 AOP(Aspect-Oriented Programming,即面向切面程序设计),提供了另外一种有关程序结构的思维方式,是OOP(面向对象程序设计)的补充。 OOP的模块化单元是类,AOP的模块化单元是切面。切面可以模块化横切多个类或者对象的关注点,比如事务管理,这些关注点在AOP的词汇里,我们称之为横切关注点(crosscutting concerns). Spring的AOP框架是Spring最重要的组件之一,虽然Spring的Ioc不依赖于AOP(这意味着你如果不需要AOP你可以不用它),但是AOP是Ioc的补充,它们一起可以提供强大的中间件解决方案。 Spring框架使用AOP可以: (1)提供声明式的企业服务,作为EJB声明式企业服务的替代方案。其中最重要的一个服务就是声明式事务管理。 (2)作为OOP的重要补充,允许用户实现自定义的切面。 1、AOP相关概念 首先来认识AOP中的一些核心概念和术语,这些术语并不是特定于Spring框架的。AOP的这些术语不是很直观,比较不好理解。 (1)Aspect(切面):对横切多个类的关注点的模块化,事务管理是个很好的例子。在Spring AOP中,切面是通过常规的类(基于schema的方式)或者带有@Aspect注解的常规类(@AspectJ方式)来实现的。 (2)Join point(连接点):程序执行中的一个点

spring AOP

旧街凉风 提交于 2020-01-15 03:32:19
AOP面向切面编程 切面(Aspect ):一个关注点的模块化 ,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子 通知(Advice ):在切面的某个特定的连接点上执行的动作。 连接点(Joinpoint ):在程序执行过程中某个特定的点 ,比如某方法调用的时候或者处理异常的时候。在SpringAOP中 ,一个连接点总是表示一个方法的执行。 切入点(Pointcut ):匹配连接点的断言。通知和一个切入点表达式关联 ,并在满足这个切入点的连接点上运行 (例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心 :Spring缺省使用 AspectJ切入点语法。 引入(Introduction ):用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration ))。Spring允许引入新的接口(以及一个对应的实现 )到任何被代理的对象。 <bean id="myAspect" class="test.Aspect"></bean> <aop:config> <aop:aspect ref="myAspect"> <aop:pointcut expression="execution(* dao..*.*(..))" id="mypointcut"/> <!-- 前置通知 这里

Spring 事务处理

点点圈 提交于 2020-01-15 00:49:13
前言: 事务处理的本质 在学习事务处理前,需要明确一点: 数据库操作最终都要使用到JDBC,那么无论上层如何封装,底层都是调用Connection的commit,rollback来完成 烦人的事务处理: 在日常开发中,数据访问层(DAO)必然需要进行事务的处理,但是我们会发现,事务处理的代码通常是简单的重复的,编写这样的重复代码会浪费大量的时间,所以我们需要找到一种方案可以将这些重复的代码进行抽取,以便与管理维护和复用, 我们的需求:在一系列数据库操作上的方法上增加额外的事务处理代码,让原来的方法中只关注具体的数据处理,即在原本以及存在的数据库操作方法上添加额外的事务处理逻辑 到这里你应该想到AOP了,没错! 这样的场景下AOP是最好的解决方案; 解决方案:AOP 回顾一下Spring的AOP:在结合目前的需求 1.将目标对象(DAO)放入Spring容器 2.告知Spring你的通知代码是什么(事务处理) 3.告知Spring 哪些方法(DAO的CRUD)要应用那些通知(不同的事务处理代码) 4.从Spring中获取代理对象来完成原本的CRUD,代理对象会自动完成事务处理 Spring 事务处理API Spring作为框架,需要进行详细的设计,全方位的考虑事务处理的各个方面,而不仅是简单的帮你执行commit,rollback; Spring对事务处理进行了抽象定义

aop

坚强是说给别人听的谎言 提交于 2020-01-14 20:04:49
package cn.com.rivercloud.log.aspect; import cn.com.rivercloud.log.domain.SysLogs; import cn.com.rivercloud.log.service.SysLogsService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; /** * @author shichangle

Various pointcut expression scopes trigger multiple advice calls unexpectedly

匆匆过客 提交于 2020-01-14 14:28:13
问题 Background Logging a project using aspects such that all methods, classes, and constructors that are marked with the @Log annotation have information written to a log file. Problem Methods appear to be called recursively one-level deep, but the code does not show any such recursive relationship. Actual Logged results: 2018-09-25 12:17:29,155 |↷| EmailNotificationServiceBean#createPayload([SECURE]) 2018-09-25 12:17:29,155 |↷| EmailNotificationServiceBean#createPayload([{service.notification

Spring面试,IoC和AOP的理解

删除回忆录丶 提交于 2020-01-14 11:14:05
spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 什么是DI机制? 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此也称为依赖注入。 spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 设置注入的优点:直观,自然 构造注入的优点:可以在构造器中决定依赖关系的顺序。 什么是AOP?