aop

学习spring(4)AOP使用场景

99封情书 提交于 2020-02-04 01:41:12
文章目录 AOP是干嘛的 案例中的问题(了解) 问题1 解决1----问题2 解决2----问题3 使用动态代理技术 JDK 官方的 Proxy 类 第三方的 CGLib (略,和上个差不多) AOP是干嘛的 (aspect oriented programming面向切面编程) 简单来说它就是把我们的程序重复代码抽取出来,在需要执行的时候,使用动态代理技术,在不修改源码的基础上,对已有的方法增强 作用 :程序运行期间,不修改源码,对已有的方法进行增强 优势 :减少重复代码,提高开发效率,维护方便 实现 :动态代理技术 案例中的问题(了解) 问题1 用一般的方法控制事务,如果我们每次都执行一条 sql 语句,没有问题,但是如果业务方法一次要执行多条 sql语句,这种方式就无法实现功能了。 解决1----问题2 当我们执行时,由于执行有异常( int i=1/0 ),转账失败。但是因为我们是每次执行持久层方法都是独立事务,导致无法实现事务控制(不符合事务的一致性) //业务层实现类的转账方法: public void transfer ( String sourceName , String targetName , Float money ) { //根据名称查询两个账户信息 Account source = accountDao . findByName ( sourceName

Spring核心思想之AOP总结

ぃ、小莉子 提交于 2020-02-03 15:22:30
AOP在百度百科的解释意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 第一部分:什么是AOP AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程 AOP是OOP(面向对象编程)的延续,从OOP说起 OOP三⼤特征:封装、继承和多态 oop是⼀种垂直继承体系 示例如下:我有3个类分别为Horse,Pig,Dog。3个类里面都有共同的方法,eat()和run(),那每个类里都有共同的代码,为了代码的重复,我们可以把这3个类里共有的部分提取出来,放到另外一个类里,3个类分别继承这个新类,这是这3个类的代码就减少了很多重复的代码,最后变成这样 OOP编程思想可以解决⼤多数的代码重复问题,但是有⼀些情况是处理不了的,⽐如下⾯的在顶级⽗类Animal中的多个⽅法中相同位置出现了重复代码,OOP就解决不了 横切逻辑代码 横切逻辑代码存在什么问题: 横切代码重复问题 横切逻辑代码和业务代码混杂在⼀起,代码臃肿,维护不⽅便 AOP出场,AOP独辟蹊径提出横向抽取机制

理解POP、OOP、AOP编程

主宰稳场 提交于 2020-02-03 12:25:38
一、面向过程编程:(POP:Procedure Oriented Programming) 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是功能(即系统的数据被加工和处理的过程),在程序设计中主要以函数或者过程为程序的基本组织方式,系统功能是由一组相关的过程和函数序列构成。 从思维上来讲,面向过程更强调细节,忽视了整体性和边界性。 典型代表是 C/C++的结构体 理解: 分析解决问题所需要的步骤,然后用函数把这些步一一实现,使用的时候按顺序依次调用就可以了 代码线性,严格按着顺序,侧重解决步骤,着眼局部或者具体。 优点 流程化编程任务明确,在开发之前基本考虑了实现方式和最终结果; 开发效率高,代码的短小精悍,善于结合数据结构来开发高效率的程序; 流程明确,具体步骤清楚,便于节点分析。 缺点 需要深入的思考,耗费精力; 代码重用性低,不易扩展,维护起来难度大; 对复杂业务,面向过程的模块化难度较高,耦合度比较高。 二、面向对象编程:(OOP:Object Oriented Programming) 面向对象编程以对象为中心,面向对象作为一种新型的程序设计方法,其是以对象模型为基础进行的抽象过程,并在应用过程中形成了描述自己的抽象概念定义,包括对象、类、封装、继承以及多态等。 面向对象是一种编程范式,满足面向对象编程的语言,一般会提供类、封装

aop简介

◇◆丶佛笑我妖孽 提交于 2020-02-03 03:16:41
aop AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。 AOP的基本概念 (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知 (2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用 (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 (5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类 Spring AOP Spring中的AOP代理还是离不开Spring的IOC容器,代理的生成,管理及其依赖关系都是由IOC容器负责,Spring默认使用JDK动态代理,在需要代理类而不是代理接口的时候

Java Agent 调试,Java agent debug

∥☆過路亽.° 提交于 2020-02-03 02:09:52
Java Agent 调试,agent debug 一、简介 Java agent 是在另外一个 Java 应用(“目标”应用)启动之前要执行的 Java 程序,这样 agent 就有机会修改目标应用或者应用所运行的环境。修改环境的时候做到对于项目中的代码没有入侵性,不需要修改老项目代码即可实现想要的能力,比如常见的skywoking,就是通过这样的方式实现的。比如这篇文章 通过修改字节码实现Java Agent 通过使用 Byte Buddy,便捷地创建 Java Agent 。还有一些功能,比如热更新、arthas 替换class字节码等等。 问题 Java agent的实现原理是什么? Java agent 如何调试呢?习惯了现在的直接代码调试?对于agent 有点慌。 二、原理 Java agent 主要是通过Instrumentation实现的。 Instrumentation 简介 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义

springboot--使用AOP统一处理web请求日志

纵然是瞬间 提交于 2020-02-03 00:15:33
为什么要通过AOP来统一处理日志,因为随着你项目的增大,方法增多,代码量上来的时候,比如你有几千个方法,你要打印日志,你要在几千个方法上面都加上冗余的代码logger.info(),让你的代码量瞬间提示几千行,相信很多人都不想这样去做,那么接下来讲一个统一的处理方法: springboot--使用AOP统一处理web请求日志,首先来添加下pom文件依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <dependency> 然后贴下代码: @Aspect br/>@Component public class WebLogAspect { private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * com.itmayiedu.controller.*.*(..))") public void webLog() { } //通过使用AOP的前置通知来拦截请求信息 @Before("webLog()") public void doBefore

Spring AOP原理

和自甴很熟 提交于 2020-02-02 16:47:41
@EnableAspectJAutoProxy  @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(AspectJAutoProxyRegistrar.class) public @interface EnableAspectJAutoProxy { boolean proxyTargetClass() default false; boolean exposeProxy() default false; } AspectJAutoProxyRegistrar   AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);   创建Bean(AnnotationAwareAspectJAutoProxyCreator)的定义 RootBeanDefinition beanDefinition = new RootBeanDefinition(cls); beanDefinition.setSource(source); beanDefinition.getPropertyValues().add("order", Ordered.HIGHEST_PRECEDENCE);

Spring中IOC和AOP的详细解释

∥☆過路亽.° 提交于 2020-02-01 20:19:38
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。 主要用到的设计模式有工厂模式和代理模式。 IOC就是典型的工厂模式,通过sessionfactory去注入实例。 AOP就是典型的代理模式的体现。 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分。 在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC);创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一个概念。 面向方面编程(AOP)是以另一个角度来考虑程序结构,通过分析程序结构的关注点来完善面向对象编程(OOP)。OOP将应用程序分解成各个层次的对象,而AOP将程序分解成多个切面。spring AOP

Spring学习的一点感想

不羁岁月 提交于 2020-02-01 16:41:59
最近在学习Java体系的一些框架,先把SSM先学一遍吧,不得不说经典的Java体系带给我的冲击还是比较大的,这里不记录框架的一些实现细节,那些都记录在笔记里面了,这里记录学习 Spring 体系的一些核心思想和思维吧。 SpringFramework SpringFramework主要是两个最重要的编程思想: IoC 控制反转 AOP 面向切面编程 先说这些编程思想的出现要解决的问题: 解耦 ! 将我们庞大的工程分层,让每一层专注于解决自己的问题,这也是软件工程思想架构的思维,非常非常重要。 IoC 这是最重要的思想,完全颠覆了Java开发的思想。 简单来说,就是使用一个 容器 来完成对所有 bean对象 的管理。 这里使用了工厂模式的设计思维。 将我们需要使用到的 bean对象 都交给Spring框架来管理,我们对于 Bean对象 的获取,注入等操作都借助框架,通过 Dependency Injection 依赖注入来注入到每个需要的对象中。 我们通过 XML 或者 注解的方式能够很简单的获取我们所需要的对象,Spring框架会为我们注入到每个需要的对象中。 理解IoC最好的方式还是我们可以自己简单的实现一个 IoC 的框架,从而能够理解 IoC。 AOP 这是一种编程思维,而不是仅仅针对Java或Spring的框架。 AOP的出现让每一层能够专注于实现自己的功能,而那些通用的

Spring 学习 3- AOP

人走茶凉 提交于 2020-02-01 15:33:30
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂。 主要用到的设计模式有工厂模式和代理模式。 IOC是工厂模式参考: 设计模式-工厂模式-场景以及优缺点-目的就是应对变化 (国江面试回答的) AOP代理模式参考: 设计模式-代理模式(Proxy) 参考: 深入理解Java反射+动态代理 IOC就是典型的工厂模式,通过sessionfactory去注入实例。 AOP就是典型的代理模式的体现。 可以参考: Spring 学习 3- AOP 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分。 在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在spring里创建被调用者的工作不再由调用者来完成,因此控制反转(IoC);创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也被称为依赖注入(DI)