aop

使用spring的AOP实现web日志记录

馋奶兔 提交于 2020-01-25 10:35:53
一、AOP介绍 什么是AOP AOP:Aspect Oriented Programming,中文翻译为”面向切面编程“。面向切面编程是一种编程范式,它作为OOP面向对象编程的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、权限控制、缓存控制、日志打印等等。AOP采取横向抽取机制,取代了传统纵向继承体系的重复性代码 AOP把软件的功能模块分为两个部分:核心关注点和横切关注点。业务处理的主要功能为核心关注点,而非核心、需要拓展的功能为横切关注点。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点进行分离 使用AOP有诸多好处,如: 1.集中处理某一关注点/横切逻辑 2.可以很方便的添加/删除关注点 3.侵入性少,增强代码可读性及可维护性 AOP的术语 1.Join point(连接点) Spring 官方文档的描述: A point during the execution of a program, such as the execution of a method or the handling of an exception. In Spring AOP, a join point always represents a method execution. 程序执行过程中的一个点,如方法的执行或异常的处理。在Spring AOP中

AspectJ @DeclareParents defaultImpl code is not used when using it as dependency

早过忘川 提交于 2020-01-25 10:12:49
问题 I am working with AspectJ at the moment. I seperated AspectJ code in a dependency. Within that dependency everything works as intended. But as soon as I import it in another project only some functionality does not work anymore. When using the defaultImpl of @DeclareParents, the interface is shown within the compiled code but not the default Implementation. Here is my code to show what I mean (every code snippet is its own File): AspectJ code: public interface IAspect { String hello(); }

SSM框架搭建

偶尔善良 提交于 2020-01-25 10:04:08
开发环境:   JDK  1.7   Tomcat  7   Spring  5.0.5   Mybatis  3.2.6   Log4j2  2.10   Maven  3.2.5 首先创建一个 Maven 工程:   参考: http://www.cnblogs.com/guofz/p/8903074.html pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>ssm</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>ssm Maven Webapp</name> <!--

Why aspect not triggered for owner side in OneToOne relationship?

泄露秘密 提交于 2020-01-25 08:42:29
问题 For example, I have a bidirectional one-to-one relationship: public class Document { @OneToOne(mappedBy = "document", cascade = CascadeType.ALL) private DocumentMetadata documentMetadata; } public class DocumentMetadata { @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "document_id") private Document document; } When I save the Document entity by using Spring Data, it also saves the DocumentMetadata entity: DocumentMetadata documentMetadata = DocumentMetadata.builder() /*some fields are

Spring源码分析之——AOP的原理及初始化细节

倖福魔咒の 提交于 2020-01-25 02:46:53
废话不多说!!!!!! AOP 是 Aspect Oriented Programming 的缩写,译为面向切向编程。 原理:Spring AOP的底层源码是基于动态代理和拦截器模式。 对拦截器有疑问的可以看: 设计模式之——拦截器模式 为什么要动态代理? ——答:因为业务类本身是不会主动调用切面逻辑(避免耦合),所以业务类必须被代理,由代理类负责调用业务类,并且调用切面;Spring AOP的JDK动态代理的Invocation类是:JdkDynamicAopProxy,这个类完完整整地实现了动态代理以及后续的拦截器模式的切面调用。 AOP调用切面的原理? ——答:AOP的切面调用本质上是一个拦截器模式,通过解析配置文件把Adivce Bean(切面Bean)封装成一个个拦截器(Interceptor),组成一个调用链(chain),在代理类中调用,调用方式同拦截器模式一模一样。 看上图,切面Bean可以实现MethodBeforeAdvice, AfterReturning, Throwing等接口,实现invoke方法,而Spring通过MethodBeforeAdviceInterceptor,AfterReturningAdviceInterceptor等拦截器类封装业务切面Bean,这样就可以持有业务Advice Bean对象

spring AOP源码分析(一)

一世执手 提交于 2020-01-25 02:12:08
对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中;2.为目标对象配置增强行为以及代理对象的生成,可以理解为AOP的准备阶段;3.代理对象调用方法,增强行为的触发执行,此时是AOP生效的阶段。我们可以把1,2理解为IOC阶段;2,3理解为AOP阶段。 我们先看第一部分:BeanDefination的解析注册过程 由一个demo进入源码分析,创建一个接口UserDao public interface UserDao { void addUser(); void deleteUser(); } 创建UserDaoImpl类 public class UserDaoImpl implements UserDao{ public void addUser() { System.out.println("add user "); } public void deleteUser() { System.out.println("delete user "); } } 创建一个Logger类 public class Logger { public void recordBefore(){ System.out.println("recordBefore"); } public void

Enabling compile-time AspecJ for Spring Method Security

五迷三道 提交于 2020-01-24 20:44:05
问题 Spring AOP runs everything through proxies which sadly can't be everywhere. For this reason Spring Security's annotations @PreAuthorize , @PostAuthorize , @PreFilter and @PostFilter (also @Secured ) will not be taken into consideration when calls are not going through said proxies. Proxies are created only for singletons ( @Bean s) so We are greatly limited when We want to secure methods on specific objects (such as JPA @Entities ) that are not beans. Proxies also won't be called within

Spring AOP 源码解析

妖精的绣舞 提交于 2020-01-24 00:34:26
文章目录 前言 本文使用的调试代码 IOC 容器管理 AOP 实例 ProxyFactory 详解 基于注解的 Spring AOP 源码分析 闲聊 InstantiationAwareBeanPostProcessor 小结 之前写过 IOC 的源码分析,那篇文章真的有点长,看完需要点耐心。很多读者希望能写一写 Spring AOP 的源码分析文章,这样读者看完 IOC + AOP 也就对 Spring 会有比较深的理解了。今天终于成文了,可能很多读者早就不再等待了,不过主要为了后来者吧。 本文不会像 IOC 源码分析那篇文章一样,很具体地分析每一行 Spring AOP 的源码,目标读者是已经知道 Spring IOC 源码是怎么回事的读者,因为 Spring AOP 终归是依赖于 IOC 容器来管理的。 阅读建议:1、先搞懂 IOC 容器的源码 ,AOP 依赖于 IOC 容器来管理。2、仔细看完 Spring AOP 使用介绍 这篇文章,先搞懂各种使用方式,你才能"猜到"应该怎么实现。 Spring AOP 的源码并不简单,因为它多,所以阅读源码最好就是找到一个分支,追踪下去。 本文定位为走马观花,看个大概,不具体到每一个细节。 目录: 前言 这一节,我们先来"猜猜" Spring 是怎么实现 AOP 的。 在 Spring 的容器中,我们面向的对象是一个个的 bean 实例

Spring 事务归纳

雨燕双飞 提交于 2020-01-23 22:30:39
Spring transaction 什么是事务 A用户向B用户转帐100,第一步要从A帐户扣出100,第二步要将B帐户加上100。其中无论是第一步失败,还是第二步失败。都应该将A、B帐户的余额保持和转帐操作之前一致。 事务就是一系列相关联操作的集合,一个事务可以是多个步骤组成,如果一个步骤失败,那么整个流程都应该回滚到初始状态。 事务的四个特性 原子性(Atomicity) 一个事务是一个整体,无论有多少个步骤组成,要么所有步骤都成功,要么所有步骤都失败。 一致性(Consistency) 一个事务完成(无论是成功还是失败),所有的业务都应该处于一致的状态,不应该部分步骤成功,部分步骤失败,显示中的数据一致性不会被破坏。 隔离性(Isolation) 多个事务处理相同的数据的时候,事务间应该是相互隔离的,防止数据损坏。 持久性(Durability) 一旦事务完成,无论系统发生什么异常,结果都不应该受到影响,通常事务的结果被写入到数据库中。 Spring处理事务的核心接口 Spring涉及到事务管理的核心接口相互关系如下 Spring并没有直接提供事务管理的实现,而是提供了一个接口PlatformTransactionManager。具体的实现依赖项目中所使用的持久化接口。 PlatformTransactionManager 定义了所有的具体实现类必须要有的方法

Spring AOP通俗理解与应用

笑着哭i 提交于 2020-01-23 13:21:04
目录 AOP 图解AOP 概念 通俗理解AOP 作用 实现方式 应用场景 应用 Aop与SpringAOP的关系   关于AOP,一般都会先去了解AOP的基础概念,如切点、通知、连接点、切入点 、引入和织入等,面对晦涩难懂的概念,很容易陷入困境,找了几篇讲解较好的文章,将其整合起来,帮助深入理解AOP AOP   AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容(Spring核心之一),是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 作用   为了更清晰的逻辑,可以让你的业务逻辑去关注自己本身的业务,而不去想一些其他的事情,这些其他的事情包括:安全,事物,日志等。 图解 传统的纵向体系代码复用: 横向抽取机制(AOP思想): 概念 1.通知(Advice)   就是你想要的功能,也就是上面说的安全,事务,日志等。你得先定义好把,然后在想用的地方用一下。 2.连接点(JoinPoint)   这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后