spring aop原理

Spring AOP 实现原理与 CGLIB 应用

天涯浪子 提交于 2019-11-29 13:27:38
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。 AOP 的存在价值 在传统 OOP 编程里以对象为核心,整个软件系统由系列相互依赖的对象所组成,而这些对象将被抽象成一个一个的类,并允许使用类继承来管理类与类之间一般到特殊的关系。随着软件规模的增大,应用的逐渐升级,慢慢出现了一些 OOP 很难解决的问题。 我们可以通过分析、抽象出一系列具有一定属性与行为的对象,并通过这些对象之间的协作来形成一个完整的软件功能。由于对象可以继承,因此我们可以把具有相同功能或相同特性的属性抽象到一个层次分明的类结构体系中。随着软件规范的不断扩大,专业化分工越来越系列,以及 OOP 应用实践的不断增多,随之也暴露出了一些 OOP 无法很好解决的问题。 现在假设系统中有 3 段完全相似的代码,这些代码通常会采用“复制”、“粘贴

Spring+MyBatis多数据源配置实现

我怕爱的太早我们不能终老 提交于 2019-11-29 10:06:53
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格式 ConversionPattern=%d %-5p [%t] %c - %m%n log4j.rootLogger=DEBUG,Console log4j.logger.com.cnblogs.lzrabbit=DEBUG log4j.logger.org.springframework=ERROR log4j.logger.org.mybatis=ERROR log4j.logger.org.apache.ibatis=ERROR log4j.logger.org.quartz=ERROR log4j.logger.org.apache.axis2=ERROR log4j.logger.org.apache.axiom=ERROR log4j.logger.org.apache=ERROR log4j.logger.httpclient=ERROR #log4j.additivity.org.springframework=false #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j

自己总结的一些三大框架面试题

夙愿已清 提交于 2019-11-29 06:16:43
Struts 谈谈你对Struts的理解。 答: 1.struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。 一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀; 2.ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。 3.要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性

Struts,Hibernate,Spring经典面试题收藏

风格不统一 提交于 2019-11-29 05:58:16
Struts,Hibernate,Spring经典面试题收藏 以备不时只需。 关键字: struts, hibernate, spring 先简单的提一下, 要开发出好的,高质量的j2ee系统, 评价系统的高低水平 ,解耦性 至关重要! 而在开发中主要分成三个层次,表现层, 服务层, 持久层。从这三层次去解藕。 spring的作用就是把服务从表现层中,抽取出來, hibernate把持久层抽取出來。 剩下的表现层交给 struts控制 但是面对那么多的框架,为什么在持久层中我们选择hibernate ,在服务层我们用spring,下面都有说。 Hibernate工作原理? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用 : 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架

框架 | Spring面试题总结

隐身守侯 提交于 2019-11-29 05:37:01
1、什么是Spring? Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。 2、Spring有哪些优点? 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。 容器:Spring包含并管理应用程序对象的配置及生命周期。 MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。 事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。 异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。 3、Spring 事务实现方式 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。声明式事务管理

Spring AOP动态代理介绍,解决Spring Boot中无法正常启用JDK动态代理的问题

别来无恙 提交于 2019-11-29 00:54:34
Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理。 JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只能为接口创建代理实例。 如果被代理目标没有接口那么Spring也无能为力,Spring通过Java的反射机制生成被代理接口的新的匿名实现类。 JDK动态代理具体实现原理: 通过实现 InvocationHandlet 接口创建自己的调用处理器; 通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理; 通过反射机制获取动态代理类的构造函数,其唯一参数类型就是调用处理器接口类型; 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数参入; CGLib动态代理 CGLib 全称 Code Generation Library ,是一个强大的高性能字节码生成类库,可以实现运行期动态扩展Java类。 Spring在运行期采用CGLib的字节码技术为类创建一个子类,并在子类中拦截所有父类方法的调用,织入横切逻辑实现AOP面向切面编程。 注意事项 如果被代理的对象实现了接口,那么Spring默认会使用JDK动态代理,否则会强制使用CGLib实现动态代理(如果被代理的类被final关键字所修饰,那么代理会失败) 关于两者的性能,JDK动态代理所创建的代理对象

Spring 面试问题 TOP 50

拈花ヽ惹草 提交于 2019-11-29 00:43:49
Spring 面试问题 TOP 50 2018年08月20日 09:45:16 SELECT_BIN 阅读数 65 更多 分类专栏: 面试宝典 原文: http://www.cnblogs.com/jingmoxukong/p/9408037.html#spring-%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98-top-50 Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架。那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下。 本文内容主要翻译自 Top 50 Spring Interview Questions You Must Prepare In 2018 1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年。这是第一个支持注解的版本。 Spring 3.0 发布于 2009 年。它完全利用了 Java5 中的改进,并为 JEE6 提供了支持。 Spring 4.0 发布于 2013 年。这是第一个完全支持 JAVA8 的版本。 1.2. 什么是 Spring Framework? Spring 是一个开源应用框架

花了近十年的时间,整理出史上最全面Java面试题

痞子三分冷 提交于 2019-11-28 18:09:38
1、什么是Spring? Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。 2、Spring有哪些优点? 轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。 容器:Spring包含并管理应用程序对象的配置及生命周期。 MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。 事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。 异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。 3、Spring 事务实现方式 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。 声明式事务管理

spring ioc和aop理解

我的梦境 提交于 2019-11-28 17:19:02
spring IOC 1.目的:就是降低程序间的依赖关系 2.原理:通过反射原理将我们控制层中的 dao层、 service层类以工厂模式在static代码块中实现加载后存放入map中 , 并实现单列 。 spring bean的依赖注入 有三类 1.基本类型和String 2.其他bean类型(在配置文件中或者注解配置过的bean) 3.复杂类型/集合类型 注入方式也有三类   1.构造函数注入 2.set方式注入 3.注解注入 来源: https://www.cnblogs.com/cwone/p/11939192.html

Spring Aop 动态代理失效分析

旧街凉风 提交于 2019-11-28 16:41:37
1. Spring Aop 原理 Spring Aop 通过动态代理创建代理对象,在调用代理对象方法前后做增强。 2. Transactional , Async 注解失效? 当在动态代理方法中调用当前实例的 Transactional 或 Async 标记的方法时,注解不会生效; 原因:在此条件下调用注解标记的方法相当于调用实例本身的方法 this.func() ,此时不会通过 Spring Aop 的增强,所以注解不生效 3. 注解失效的处理方式 配置 <aop:aspectj-autoproxy expose-proxy="true" /> 暴露代理对象,Spring Boot 中可使用 @EnableAspectJAutoProxy(exposeProxy=true) 注解 将方法中的 this.func() 调用修改为以下形式 // 从AppContext中获取当前代理对象(ThreadLocal) Object proxy = AppContext.currentProxy; // 调用代理方法 proxy.func(); 来源: https://www.cnblogs.com/cheney256/p/11415886.html