spring aop原理

spring aop

拈花ヽ惹草 提交于 2020-04-04 11:11:26
本文引用自 http://www.cnblogs.com/ityouknow/p/5329550.html 什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 AOP使用场景 AOP用来封装横切关注点,具体可以在下面的场景中使用: Authentication 权限 Caching 缓存 Context passing 内容传递 Error handling 错误处理 Lazy loading 懒加载 Debugging  调试 logging, tracing, profiling and monitoring 记录跟踪 优化 校准 Performance optimization 性能优化 Persistence  持久化 Resource pooling 资源池 Synchronization 同步 Transactions 事务 Spring AOP底层技术 Spring提供了两种方式来生成代理对象: JDKProxy和Cglib

SSM框架中IoC、DI与AOP的理解

断了今生、忘了曾经 提交于 2020-03-30 13:06:38
  框架封装了普通项目中程序员需要重复书写的代码和调用过程,就比如说在传统的jsp项目中,我们的controller接收到前端的请求然后程序员就需要去开发Dao层,里面还涉及数据库的连接和存储过程的代码,大部分都是冗余的代码,而有了SSM框架后极大的简化了程序猿在controller以下层的开发,只需要一个service层和mapper层就行了,mapper层用来连接mapper.xml文件的,而直接用mapper.xml做sql语句的开发就行了,而数据库连接的和存储的过程都直接由Mybatis负责了,你只需要负责传递形参和接收返回数据就行了,这样就完成了一次完整的数据库交互! 1.1、IoC是什么   Ioc— Inversion of Control ,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转,哪些方面反转了”,那我们来深入分析一下: ● 谁控制谁,控制什么: 传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么

Spring AOP面向切面编程

独自空忆成欢 提交于 2020-03-27 10:59:28
目录 1.AOP概览 2.Spring AOP的使用举例 PointCut切入点 Advice通知 3.Spring AOP的实现原理 3.1运行时织入 3.1.1代理模式 3.1.2 JDK动态代理 3.1.3 cglib动态代理 3.1.4 Spring如何创建代理bean ProxyFactoryBean的getObject()方法 getSingletonInstance()方法 createAopProxy() DefaultAopProxyFactory的createAopProxy()方法 getProxy(aopProxy) JdkDynamicAopProxy.getProxy()方法 ObjenesisCglibAopProxy.getProxy()方法 4.Spring AOP的实现原理 4.1 链式调用 4.1.1 职责链模式 4.1.1.1 V1 4.1.1.2 V2 4.1.2 Spring内部实现 1)拦截器链是如何生成的 2)拦截器链是如何链式调用的 3)Spring使用职责链模式实现拦截器链链式调用 5. ProxyFactory实现AOP 1.AOP概览 AOP(Aspect Oriented Programming),什么是面向切面编程? 1)AOP是一种编程范式,不是编程语言 编程范式概览 面向过程编程 面向对象编程 函数式编程 事件驱动编程

spring 理解Spring AOP 一个简单的约定游戏

佐手、 提交于 2020-03-20 06:38:21
  应该说AOP原理是Spring技术中最难理解的一个部分,而这个约定游戏也许会给你很多的帮助,通过这个约定游戏,就可以理解Spring AOP的含义和实现方法,也能帮助读者更好地运用Spring AOP到实际的编程当中,这对于正确理解Spring AOP是十分重要的 约定规则   代码清单:定义Interceptor接口 package com.ssm.chapter11.game; public interface Interceptor { public void before(Object obj); public void after(Object obj); public void afterReturning(Object obj); public void afterThrowing(Object obj); }   这里是一个拦截接口,可以对它创建实现类。如果使用过Spring AOP,你就会发现笔者的定义和Spring AOP定义的消息是如此相近。   代码清单:ProxyBeanFactory的getBean方法 package com.ssm.chapter11.game; public class ProxyBeanFactory { public static <T> T getBean(T obj, Interceptor interceptor) {

Spring AOP原理分析

谁都会走 提交于 2020-03-14 10:03:42
AOP基础概念 目标类(Target) 代理(Proxy) 连接点(Joinpoint) 切点(Pointcut) 通知(Advice):增加的功能 切面(Aspect):切点 + 通知 织入(Weaving):增强目标类的方法 引入(Introduction):增加新方法、属性 Spring AOP使用方式 1 、基于代理的 AOP <!-- 切面=通知+切点 --> <bean id="myAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"> <property name="advice" ref="myAdvice"/> <property name="pointcut" ref="myPointcut"/> </bean> <!-- 定义代理对象 --> <bean id="aopProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="targetObject"/> <property name="interceptorNames" value="myAdvisor"/> </bean> 2 、纯简单 Java 对象切面 public class

22-Spring源码解析之AOP(1)——@EnableAspectJAutoProxy注解原理

早过忘川 提交于 2020-03-12 08:54:25
Spring版本: <version>5.2.1.RELEASE</version> 目录 一、`AOP`概览 1. 例子 1.1 创建用于拦截的`Bean` 1.2 切面类 1.3 配置类 1.4 测试类 1.5 测试结果 二、 `@EnableAspectJAutoProxy`注解 三、解析`@EnableAspectJAutoProxy`注解 上一篇: 21-Spring源码解析——IOC容器创建与Bean生命周期总结 截至到本篇文章,我终于把 IOC 写完啦!现在开启 Spring 的第二个百宝箱: AOP 一、 AOP 概览 我们知道,使用 面向对象编程( OOP ) 有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为的时候,例如:日志、安全检测等,我们只有在每个对象里引用公共行为,这样程序中就产生了大量的重复代码,程序就不便于维护了,所以就有了一个对面向对象编程的补充,即 面向切面编程( AOP ) , AOP 所关注的方向是横向的,不同于 OOP 的纵向。 Spring 2.0 采用 @AspectJ 注解对 POJO 进行标注,从而定义了包含 切点信息 和 增强横切逻辑 的切面。 Spring 2.0 将这个切面织入到匹配的目标 Bean 中。 下面,我们先来直观地浏览一下 Spring 中 AOP 的简单示例。 1. 例子 我们这个例子比较纯粹

基于spring自动注入及AOP的表单二次提交验证

£可爱£侵袭症+ 提交于 2020-03-10 23:24:50
这几天在网上闲逛,看到了几个关于spring的token二次提交问题,受到不少启发,于是自己动手根据自己公司的项目框架结构,制作了一个基于spring自动注入加上AOP的表单二次提交。 原理:建立两个注解类,一个进行token的设置,一个进行token的验证。在一个Aspect中,对这两个注解进行捕获并进行相应的验证。 废话不多说,下面是代码: Token注解类,标记需要设置token的方法。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) //设定此注解对应的是方法。 public @interface Token { } TokenValid注解类,标记需要验证token的方法。 @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TokenValid { } TokenAspect类,对上面两个注解标识的方法的访问进行捕获并处理。 @Aspect @Component public class TokenAspect { @Around("@annotation(token)") //可以直接捕获下面这个方法中参数所设定的注解类型

easySpring | 手写SpringIOC、AOP

被刻印的时光 ゝ 提交于 2020-03-08 18:49:49
easySpring 在学到Java的Spring容器概念这里,我参考网上的博客和自己的理解实现了一个简易的Spring容器也就是这个项目。该项目分为 up 和 down 两部分。 up 模块只实现了最简单的IOC和AOP功能,两者并没有联系起来。 后来在 down 中实现了更复杂的IOC、AOP功能,并使两者能够很好地进行协作。 1. 简单的IOC和AOP的实现 1.1 简单的IOC容器实现 先从简单的 IOC 容器实现开始,最简单的 IOC 容器只需4步即可实现,如下: 加载 xml 配置文件,遍历其中的 标签 获取标签中的 id 和 class 属性,加载 class 属性对应的类,并创建 bean 遍历 标签中的 标签,获取属性值,并将属性值填充到 bean 中 将 bean 注册到 bean 容器中 代码结构如下: SimpleIOC // IOC 的实现类,实现了上面所说的4个步骤 SimpleIOCTest // IOC 的测试类 Car // IOC 测试使用的 bean Wheel // 同上 ioc . xml // bean 配置文件 容器实现类 SimpleIOC 的代码: package easySpring . up . ioc ; import org . w3c . dom . Document ; import org . w3c . dom .

spring——AOP原理及源码五【系列完】

为君一笑 提交于 2020-03-08 17:33:44
前情回顾:   在 上一篇 中,通过 wrapIfNecessary 方法,我们获取到了合适的增强器(日志方法)与业务类进行包装,最终返回了我们业务类的代理对象。      本篇我们将从业务方法的执行开始,看看增强器(日志方法)是怎么在方法执行的前后和发生异常时被调用的。以及在文章的最后总结整个AOP的执行流程。 调试的起点: 给测试方法打上断点,然后一直跳到下一个断点直到执行方法,如下   进入断点: 1 @Override 2 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { 3 Object oldProxy = null; 4 boolean setProxyContext = false; 5 Class<?> targetClass = null; 6 Object target = null; 7 try { 8 if (this.advised.exposeProxy) { 9 // Make invocation available if necessary. 10 oldProxy = AopContext.setCurrentProxy(proxy); 11 setProxyContext

Spring中AOP的理解

岁酱吖の 提交于 2020-03-08 07:49:36
1.AOP的概念 AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术。AOP提供从一个角度来考虑程序结构以完善面向对象编程。它为开发人员提供了一种描述横切关注点的机制,并能够自动将横向关注点入到面向对象的软件系统中,从而实现了横切关注点模块化 AOP一般用于实现那些与业务无关,但是业务模块所共同调用的逻辑,例如异常拦截、事务管理、日志管理和权限控制等,AOP将这些代码封装起来,有利于减少系统的重复代码,降低模块间耦合度,提供可维护性。 AOP的基本概念:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象;Joinpoint(连接点):程序执行过程中某个特定的点,比如处理异常的时候;Advice(通知):在切面的某个特定连接点上执行的操作;Pointcut(切入点):匹配连接点的断言;Introduction(引入):用来给一个类型声明额外的方法和属性;Target Object(目标对象):被一个或多个切面所统治的对象;Weaving(织入):被切面连接到其他应用程序类型或对象上,并创建被通知的对象。 2.AOP的实现原理 AOP的核心实现与IoC一样依赖于 Java 的反射机制,但是与IoC不同的地方是,IoC用到的相关设计模式是工程模式