spring aop原理

Spring应用学习——AOP

南楼画角 提交于 2019-11-28 14:27:02
1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就是在每一个业务逻辑的代码中都会有相同的代码围绕业务逻辑代码,而AOP就是将这些重复代码抽取出 2. AOP实现原理:就是代理模式,主要有两种方式,分别是静态代理和动态代理, 静态代理:采用一些工具类对原来的类生成一个代理类,代理类以.class存在 动态代理(重点,spring基于动态代理实现aop):在运行中,通过反射生成类的代理对象,在代理对象中对原来的对象进行增强。 3. spring采用动态代理的技术实现包括: 基于接口生成动态代理对象:使用jdk提供的反射机制实现,参考这篇博客, JDK动态代理实现详解 基于类生成动态代理对象:通过继承实现,根据类生成一个子类(代理对象),在代理对象(子类)中对父类进行增强,参考 这篇博客 。实现 cglib通过继承的形式来实现动态功能的代理 那么就无法避免一些继承的缺点,那就是无法代理final方法和无法代理final类,示例使用代码如下 import java.lang.reflect.Method; import org.springframework.cglib.proxy.MethodInterceptor; import org

Spring的AOP实现原理,动态代理。

血红的双手。 提交于 2019-11-28 03:28:43
AOP面向切片编程,实现原理就是动态代理,动态代理又分为JDK动态代理和CGLIB动态代理。 1,JDK动态代理智能实现对接口的代理 public class UserManagerImpl implements UserManager { @Override public void addString userId, String userName) { System.out.println( "UserManagerImpl.addUser"); } @Override public void dellet(String userId) { System.out.println( "UserManagerImpl.delUser"); } } //动态代理类只能代理接口(不支持抽象类),代理类都需要实现InvocationHandler类,实现invoke方法。该invoke方法就是调用被代理接口的所有方法时需要调用的,该invoke方法返回的值是被代理接口的一个实现类 public class LogHandler implements InvocationHandler { private Object targetObject; //绑定关系,也就是关联到哪个接口(与具体的实现类绑定)的哪些方法将被调用时,执行invoke方法。 public Object

spirng Aop原理

旧城冷巷雨未停 提交于 2019-11-28 03:26:19
spring aop 即面些切面编程 具体的关键点在于: CGLIB的动态代理技术,可以代理类和接口,相对于JDK自带的动态代理技术,多了可以代理除了接口的类的功能。 具体流程: 通过切面的思想,在类加载的同时,进行一些增强操作,如记录到日志中等 在jvm中,我们程序运行都是以方法为基本单位,那么就是纵向的程序执行方式,这时,aop引入了一个连接点的概念,所谓的连接点(join Point),就是所谓的方法。 而我们选择的切入点(point cut),就是选择哪几个方法的过程。 选择完切入点后,我们就需要获取到方法,即所谓的连接点,那么aop就是利用的动态代理的模式来获取到的,加入动态代理后的程序,会先执行动态代理(通过的也是IOC的方式)对象的方法,然后在去执行原本的方法,在spring aop框架中,它能够获取到所有的非final的public方法,因此能够插入一些我们自己的业务代码。 具体的插入aop提供了 这样的一个思路,即 (简单版) before Method 之前怎么做 try { 调用 Method } catch (InterruptedException e) { 异常的怎么做 } finally { 返回结果之前怎么做 } 在aop中,我们又存在了一个advice和aspect的概念,advice即上述途中给出的思路,它包括了前置,后置,环绕,异常等建以

spring框架AOP(声明式事务控制)

荒凉一梦 提交于 2019-11-27 14:09:05
1 整合 Hibernate 事务控制 1.1 了解事务 我们一般说的事务是来源于关系数据库,当有数据持久化需求时一般都需要事务控制。 关系数据库:支持事务控制, mysql 数据库存储引擎为 InnoDB 支持事务,存储引擎为 MyIsam 不支持事务。 jdbc :支持事务控制,设置 CommitAuto(false) Hibernate :支持事务,使用 session.beginTransaction(), 再 session.getTransaction().commit() 提交事务 spring 如果控制事务:由于使用 hibernate , spring 对 Hibernate 中 session 进行管理,支持事务。 1.2 HibenateTemplate spring 针对持久层框架提供了模板类封装数据库操作方法: 1 、可以简化数据访问的开发 2 、支持事务控制, spring 对 Hibernate 中 session 进行管理 spring 提供了很多模板: 1 、 JdbcTemplate ,针对 jdbc 操作数据库模板,相当于 DbUtil 2 、 HibernateTemplate ,针对 Hibernate 操作数据库模板。 1.3 加入 jar spring-orm-4.2.4.RELEASE.jar : spring 针对 orm

浅析spring AOP面向切面编程

拜拜、爱过 提交于 2019-11-27 13:02:21
关于spring AOP 编程的理解 spring 的AOP编程有两种实现方式,第一种是sping的动态代理,该AOP是一种实现其接口的方式,进行切面编程,另外一种方式是cglib代理,该代理方式原理是继承自己的类。 spring的配置文件如下: <aop:config proxy-target-class="false"> <!-- proxy-target-class="false" 表示动态代理(系统默认),proxy-target-class="true" cglib代理 --> </aop:config> AOP配置方式,一种是xml配置文件方式,另一种是注解方式。下面详细介绍两种方式的用法: <aop:config proxy-target-class="false"> <aop:aspect id="log" ref="userManualProxy" > <aop:pointcut id="login" expression="execution(* com.sheemes.service.impl.LoginServiceImpl.*(..))" /> <aop:after method="loginInfo" pointcut-ref="login" /> </aop:aspect> </aop:config> AOP中的相关概念 Aspect(切面):

Spring AOP 原理的理解

拟墨画扇 提交于 2019-11-27 09:42:00
  >AOP基本概念   1)通知(Advice):织入到目标类连接点上的一段程序代码。通知分为五种类型:   - Before:在方法被调用之前调用   - After:在方法完成后调用通知,无论方法是否执行成功   - After-returning:在方法成功执行之后调用通知   - After-throwing:在方法抛出异常后调用通知   - Around:通知了好、包含了被通知的方法,在被通知的方法调用之前后调用之后执行自定义的行为   2)切点(Pointcut):AOP通过“切点”定位特定的连接点   3)连接点(Joinpoint):程序执行的某个特定位置:如类开始初始化前、类初始化后、类某个方法调用前、调用后、方法抛出异常后。这些代码中的特定点,称为“连接点”。   4) 织入(Weaving):织入是将增强添加到目标类具体连接点上的过程。AOP有三种织入方式:   - 编译期织入,这要求使用特殊的Java编译器;   - 类装载期织入,这要求使用特殊的类装载器;   - 动态代理织入,在运行期为目标类添加增强生成子类的方式。   Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。   5)切面(Aspect)切面由切点和通知组成,它既包括了横切逻辑的定义,也包括了连接点的定义   Spring 是切片流程   代理模式  

Spring+MyBatis多数据源配置实现

◇◆丶佛笑我妖孽 提交于 2019-11-27 09:33:45
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.appender.Console.Threshold = DEBUG log4j.appender

【第1章 Spring概述与结构】1.2 Spring模块与结构

你。 提交于 2019-11-27 07:05:19
上一节: 【第1章 Spring概述与结构】1.1 Spring起源与概述 ##Spring功能## 基于Java Beans的配置管理,采用IOC的原理,特别是对依赖注入技术的使用。这些都用来减少各组件间对实施细则的相互依赖性。 一个核心的,全局适用的Bean工厂。 一个一般抽象化的层面来管理数据库间的数据处理。 建立在框架内的,对Java数据处理API和单独的JDBC数据源的一般性策略。因此,在数据处理支持上对Java企业版本环境的依赖性得以消除。 和一些可持续性的框架,如Hibernate,JDO,MyBatis和db4o的整合。 Web应用中的MVC框架,基于核心的Spring功能,支持多种产生视图的技术,包括JSP,FreeMarker,Velocity,Tiles,iText,和POI。 大量的AOP框架以提供诸如数据处理管理的服务。同IOC的功能一样,目的是提高系统的模块化程度 ##Spring模块## Spring框架旨在分离体系结构的层次,由7个定义良好的模块组成,因此每一层都可以修改而不会影响到其它层。每一层都不知道其上层的关注点;就其可能而言,只对所紧挨的下一层有依赖。层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能松散。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理Bean的方式。 如果作为一个整体

Spring——AOP

三世轮回 提交于 2019-11-27 05:13:49
一、概念 AOP(Aspect Oriented Programming),即面向切面编程。像日志,事务,安全等这些代码分散在各个业务逻辑之中,这样既会产生大量重复的代码也将这些逻辑与业务耦合起来。 AOP就是运用动态代理将 二、实现原理(JDK动态代理和Cglib动态代理) JDK动态代理:代理对象实现目标对象的接口(目标对象一定是要有接口的,没有接口就不能实现动态代理) Cglib动态代理: 代理对象继承目标对象。 JDK动态代理 1、目标类接口: public interface IUser { void save(); } 2、目标类 public class UserDao { public void save() { System.out.println("DB:保存用户"); } public void delete() { System.out.println("DB:删除用户"); } } 3、测试类 public class AOP { public void begin() { System.out.println("开始事务"); } public void close() { System.out.println("关闭事务"); } } JDK动态代理 public class ProxyFactory { //维护目标对象 private static

Spring AOP小结

a 夏天 提交于 2019-11-27 04:19:31
一、AOP 概念 Joinpoint:它定义在哪里加入你的逻辑功能,对于Spring AOP,Jointpoint指的就是Method。 Advice:特定的Jointpoint处运行的代码,对于Spring AOP 来讲,有Before advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。 Pointcut:一组Joinpoint,就是说一个Advice可能在多个地方织入, Aspect:这个我一直迷惑,它实际是Advice和Pointcut的组合,但是Spring AOP 中的Advisor也是这样一个东西,但是Spring中为什么叫Advisor而不叫做Aspect。 Weaving:将Aspect加入到程序代码的过程,对于Spring AOP,由ProxyFactory或者ProxyFactoryBean负责织入动作。 Target:这个很容易理解,就是需要Aspect功能的对象。 Introduction:引入,就是向对象中加入新的属性或方法,一般是一个实例一个引用对象。当然如果不引入属性或者引入的属性做了线程安全性处理或者只读属性,则一个Class一个引用也是可以的(自己理解)。Per-class lifecycle or per-instance life cycle 二