spring aop原理

JAVA基础总结

非 Y 不嫁゛ 提交于 2019-12-01 13:16:56
Java基础 1.Java中的几种基本数据类型是什么,各自占用多少字节? 答案:int : 32bit;float :32bit; short :16bit; char :16bit; byte :8bit; double:64bit 2.springCloud微服务和插件问题? 3.JDK1.7和1.8的hashMap有啥不同? 答案:HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。 4.JAVA的各种几何的机制以及区别? 5.本地线程,多线程,以及线程池的问题? 答案:如果你知道Java不支持类的多重继承,但允许你调用多个接口。所以如果你要继承其他类,当然是调用Runnable接口更好了;新建状态(New)---->就绪状态(Runnable)(线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权)----->运行状态(Running)(就绪状态的线程获取了CPU,执行程序代码)-------->阻塞状态(Blocked)

Spring AOP 源码解析

一曲冷凌霜 提交于 2019-12-01 07:22:26
本文转载自: https://javadoop.com/post/spring-aop-source 之前写过 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 实例,bean 是什么?我们可以简单理解为是 BeanDefinition 的实例,Spring 会根据 BeanDefinition

Spring系列之AOP

风流意气都作罢 提交于 2019-11-30 15:15:16
一、什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为"Aspect",即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开

SSM框架之AOP、动态代理、事务处理相关随笔

耗尽温柔 提交于 2019-11-30 13:34:48
AOP: 原理:底层利用动态代理(两种动态代理技术都使用了) 两种实现方案: 第一种:JDK 动态代理技术 实现的InvocationHandler接口,要想实现某个类的动态代理对象,必须有接口有实现类。 第二种:cglib 动态代理技术 (需要导入spring包--4个核心包) 实现了MethodInterceptor接口,原理是继承要代理的类。 第一步:导入包 4+2+2+2 第二步:准备肉鸡 编写一个接口UserService 和 UserServiceImpl,具体详见代码 第三步:编写通知类 public class MyAdvice { //Spring中的代码增强,方式非常多 // 前置通知 //--目标对象方法(切入点)执行之前调用 // 后置通知(如果出现异常不会执行) //--目标对象方法(切入点)执行之后调用 // 环绕通知 //--目标对象方法(切入点)执行之前和之后调用 // 异常拦截通知 //--切入点执行异常才会调用 // 后置通知(不论是否出现异常都会执行) //--目标对象方法(切入点)执行之后调用 // 前置通知 public void before(){ System. out .println("这是前置通知代码"); } // 后置通知 public void after01(){ System. out .println(

Dubbo的使用及原理

穿精又带淫゛_ 提交于 2019-11-30 13:19:38
Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。 Dubbo[]是一个 分布式服务框架 ,致力于提供 高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 。 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。 Dubbo能做什么? 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 Spring集成 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

深入理解Spring核心技术08---Spring中的各模块详解

江枫思渺然 提交于 2019-11-30 12:04:05
原文链接:https://blog.csdn.net/qq_38701478/article/details/82929353 在前面的几篇博客中给大家讲解了一下Spring框架的两个基本概念IOC容器和AOP,相信大家现在对Spring中的这两个部分的基本概念有了一定的认识,好了,那么今天我们就来正式的进入Spring框架的学习了。 前面提到过,Spring框架就是帮助我们创建对象、管理对象之间的关系,让我们在开发的时候只需要关注具体的业务逻辑,而不用花时间去管理对象与对象之间的联系。我们知道了IOC容器就是用来创建对象的,Spring中的依赖注入就是在创建对象的时候就帮我们建立了对象和对象之间的关系,我们不需要手动的去处理对象和对象之间的关系,这就会大大的提高了我们的开发效率。同样的,spring是支持AOP的,这样就可以很大程度上降低了程序中重复的代码,让我i们的程序更加灵活。前面给大家分别手动实现了IOC容器和AOP。相信大家对他们的实现都原理都有了一定的认识。好了,下面就来进入spring的学习了。 到今天(2018.10.20)为止,spring最新的版本是Spring5,不过我们先来以spring4的版本来讲解,因为外边的公司目前主要用的还是4.X的版本比较多,公司做项目一般的原则就是求稳不求快,意思就是慎用新技术,优先选择稳定成熟的技术。在Spring4

SpringBoot整合SSM

て烟熏妆下的殇ゞ 提交于 2019-11-30 09:42:50
其实更准确来说,是整合了MyyBatis。 1. 创建工程 这里我们推荐使用官方提供的 springboot 工具,我觉得这个其实听方便的。 需要依赖了可以再去加。需要注意的一点是,约定优于配置,这个看自己去理解了。 别的 IDE 像 Eclipse 、 idea 都是可以通过 springboot 插件实现和上面类似的方式第一种方式。至于怎么安装,详情见百度。 下面以 idea 为例,提供示例: 使用 idea可以快速创建SpringBoot的工程 这里选择常用的类库, SpringBoot将各种框架类库都进行了封装,可以减少pom文件中的引用配置: 搞清楚差别,我们同样可以手动修改整合,不过既然有了项目构建框架,我们也实属没必要烧头发了。下面来对比下差别。 比如 Spring和Mybatis整合的时候,传统Spring项目中需要引入: 1 2 3 4 5 6 7 8 9 10 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId>

spring中的AOP与IOC

早过忘川 提交于 2019-11-29 22:47:46
在J2EE的整个发展历程中,现在正是一个非常时刻。从很多方面来说,J2EE都是一个伟大的成功:它成功地在从前没有标准的地方建立了标准;大大提升了企业级软件的开放程度,并且得到了整个行业和开发者的广泛认可。然而,J2EE在一些方面已经开始捉襟见肘。J2EE应用开发的成本通常很高。J2EE应用项目至少和从前的非J2EE项目一样容易失败——如果不是更容易失败的话。这样的失败率高得让人难以接受。在这样的失败率之下, 软件开发 几乎变成了碰运气。而在J2EE遭遇失败的场景中,EJB通常都扮演着重要的角色。因此,J2EE社群不断地向着更简单的 解决方案 、更少使用EJB的方向发展[1]。然而,每个应用程序都需要一些基础设施,拒绝使用EJB并不意味着拒绝EJB所采用的基础设施解决方案。那么,如何利用现有的框架来提供这些基础设施服务呢,伴随着这个问题的提出,一个轻量级的J2EE解决方案出现了,这就是Spring Framework 。   Spring是为简化企业级系统开发而诞生的,Spring框架为J2EE应用常见的问题提供了简单、有效的解决方案,使用Spring,你可以用简单的POJO(Plain Old Java Object)来实现那些以前只有EJB才能实现的功能。这样不只是能简化 服务器 端开发,任何Java系统开发都能从Spring的简单、可测试和松耦合特征中受益。可以简单的说

Spring之AOP原理_动态代理

坚强是说给别人听的谎言 提交于 2019-11-29 19:46:13
面向方面编程( Aspect Oriented Programming ,简称 AOP )是一种声明式编程( Declarative Programming )。声明式编程是和命令式编程( Imperative Programming )相对的概念。我们平时使用的编程语言,比如 C++ 、 Java 、 Ruby 、 Python 等,都属命令式编程。命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么( How to do What )。声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么( Where to do What )。比起命令式编程来,声明式编程是在一个更高的层次上编程。声明式编程语言是更高级的语言。声明式编程通常处理一些总结性、总览性的工作,不适合做顺序相关的细节相关的底层工作。 如果说命令式编程是拼杀在第一线的基层工作人员,声明式编程就是总设计师、规则制定者。声明式编程语言的概念,和领域专用语言( Domain Specific Language ,简称 DSL )的概念有相通之处。 DSL 主要是指一些对应专门领域的高层编程语言,和通用编程语言的概念相对。 DSL 对应的专门领域( Domain )一般比较狭窄,或者对应于某个行业,或者对应于某一类具体应用程序,比如数据库等。 最常见的 DSL

完整剖析SpringAOP的自调用

泄露秘密 提交于 2019-11-29 19:28:13
摘要 spring全家桶帮助java web开发者节省了很多开发量,提升了效率。但是因为屏蔽了很多细节,导致很多开发者只知其然,不知其所以然,本文就是分析下使用spring的一些注解,不能够自调用的问题。因为本身这类文章很多,所以有些地方不会详述,直接引用其他文章。 问题 使用了Spring中哪些注解不能进行自调用 为什么代理了就不能自调用 Spring常用的 @Cache , @Async , @Transaction 这三种原理上有什么区别吗 如何解自调用的问题 使用不同的解法各自有什么坑 AOP的概述 首先需要澄清几个需要区分的名词 AOP Spring AOP AspectJ AOP Aspect-oriented programming,面向切面编程,一种解决问题的思想,将一些重复性的编码问题通过切面来实现。 很多人了解切面是通过Spring来了解的,所以会有种误解将SpringAOP和AOP划等号,其实不然。 Spring AOP Spring AOP 算是 一种简单的 AOP的落地实现方式,它主要提供在Spring容器内的一种AOP实现方式,脱离了Spring就不work了。Spring AOP并不是一套完整的AOP解决方案。 Spring的的众多组件都是这样,Spring-Session,Spring-jdbc,Spring-Cache等等,都能解决一部分通用的需求