spring aop原理

关于反射和动态代理和AOP

为君一笑 提交于 2019-11-27 03:58:50
package Exercise.reflect; /** * 反射把java中所有的东西都当做对象,甚至是类的本身也作为一种对象,并把它作为Class的对象的实例; * 反射是把类、类的属性、方法都作为一个对象类进行剖析; * * 为什么需要反射?把类变成活的,当一个类经过java虚拟机编译之后会生成对应的字节码文件,即xxx.class, * 而反射就是去解析这个类的信息,包括其中所包含的变量和方法; * 在运行期间去加载一个类,并对类进行剖析,甚至可以给一个类的属性动态的赋值,也可以去唤醒它的内部的方法, * * Spring容器就是用反射去加载一个类的; * * 感觉反射很神奇,抽象,它的底层到底是如何实现的?反射的底层到底是如何实现的?说获得一个类就获得一个类, * 是不是编译原理的? * 源代码→预处理器 → 编译器 → 目标代码(机器语言) → 可执行文件 * * 另外,java虚拟机的原理到底是什么?把一个类加载,并生产对应的字节码文件;java虚拟机在一定程度上已经 替代了编译器,生成了目标文件,所以它能随处运行; * */ public class ClassDemo01 { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException,

spring aop知识点整理

你说的曾经没有我的故事 提交于 2019-11-27 03:30:13
Aspect(切面) : Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。 Joint point(连接点) :表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。 Pointcut(切点) :表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。 Advice(增强) :Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。(共有五种:before,after (无论是否发生异常,都进行执行的通知),around ,afterRunning,afterThrowing) Target(目标对象) :织入 Advice 的目标对象.。 Weaving(织入) :将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程。 举例 需要增强的类 package aop; import org.springframework

1.springAOP原理分析

狂风中的少年 提交于 2019-11-27 01:10:45
环境:jdk1.8 + spring boot 2.0.9.RELEASE Spring AOP的实现本质上就是代理Proxy + 一系列的拦截器 使用@Aspect,引入依赖 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> 1. AOP中的几个关键词介绍 (概念性的东西,copy别人的) 切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”。 连接点(Joinpoint) :程序执行过程中的某一行为,个人理解为是对目标对象method的封装。 通知(Advice) :“切面”对于某个“连接点”所产生的动作。 切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。 目标对象(Target Object):被一个或者多个切面所通知的对象。 AOP代理(AOP Proxy): 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。 可以通过以下方式定义一个切面,切入点表达式限定了那些对象需要被代理,以下仅以demoController为例 @Aspect @Component public class

Spring AOP实现原理(递归拦截器)

时光毁灭记忆、已成空白 提交于 2019-11-26 19:32:47
一、Spring AOP工厂 1. 如果AdvisedSupport通知器没有进行自定义设置,默认使用JDK动态代理 2. 如果AdvisedSupport进行了设置,就判断要代理的类是不是接口,接口使用JDK动态代理,否则使用Cglib动态代理 3. JDK动态代理和Cglib动态代理,都是基于 AdvisedSupport 的 MethodInterceptor 链实现的 @Override public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) { Class<?> targetClass = config.getTargetClass(); if (targetClass == null) { throw new AopConfigException("TargetSource cannot determine target class: " + "Either an interface or a target is required for proxy creation

AOP的理解

拈花ヽ惹草 提交于 2019-11-26 17:16:10
描述:对于AOP术语一些总结以及相关的案例 标签:Spring 面向切面编程 目录 {:toc} 几个术语的基本解释 通知 直接明白的说就是你想要的功能(为了更清晰的逻辑,让你的业务逻辑去关注本身的业务,而不是去想其他的事情,这些其他的事情包括,比如安全、事务、日志等) 连接点 就是允许你使用通知的地方,比如每个方法的前后或者抛出异常时都是连接点。Spring只支持方法连接点 切入点 比如说,你的一个类里有15个方法,那不就是几十个连接点了,但是你不可能在所有方法上面都写一个通知吧,你只是想让其中几个方法,就可以使用 切点去筛选连接点 ,选中那几个你想要的方法 切面 切面就是通知和切入点的集合,也就是一个类。没连接点什么事情,连接点就是为了让你更好的去理解切点。通知说明了干什么和什么时候干(通过@Before @After等注解就可以明白),而切入点说明了在哪里干(指定到底是哪个方法) 引入 允许我们向现有的类(目标类)添加新方法属性。其实说白了就是切面类(这里不就是定义了切入点 通知嘛),就是切面类可以为目标类添加新方法属性。 目标 也就是上面提到的目标类,也就是需要被通知的对象。这个目标类的话就是我们的真正业务逻辑,而不是其他事情(其他事情在切面类中去做,上面提到的日志、事务等) 代理 怎么实现整套AOP机制的,都是通过代理 织入

Spring常见面试题总结(超详细回答)

让人想犯罪 __ 提交于 2019-11-26 00:47:01
1、Spring是什么? Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。 主要由以下几个模块组成: Spring Core:核心类库,提供IOC服务; Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); Spring AOP:AOP服务; Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; Spring ORM:对现有的ORM框架的支持; Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; Spring MVC:提供面向Web应用的Model-View-Controller实现。 2、Spring 的优点? (1)spring属于低侵入式设计,代码的污染极低; (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性; (3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。 (4)spring对于主流的应用框架提供了集成支持。 3、Spring的AOP理解: OOP面向对象,允许开发者定义纵向的关系