切面

Kotlin版Aspect入门篇

家住魔仙堡 提交于 2019-12-04 09:02:14
介绍:   AspectJ是一个面向切面编程的一个框架,它扩展了java语言,并定义了实现AOP的语法。在将.java文件编译为.class文件时默认使用javac编译工具,AspectJ会有一套符合java字节码编码规范的编译工具来替代javac,在将.java文件编译为.class文件时,会动态的插入一些代码来做到对某一类特定东西的统一处理。通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的技术。 对业务逻辑的各个部分进行隔离,耦合度降低,提高程序的可重用性,同时提高了开发的效率。   OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分,而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。   AOP编程的主要用途有:日志记录,行为统计,安全控制,事务处理,异常处理,系统统一的认证、权限管理等。   AspectJ的配置很麻烦,这里使用 AspectJX 框架,框架地址: https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx 首先,先来点软柿子捏捏,体验一把什么叫切面编程,比较常用的埋点统计,在我们需要自己去实现埋点统计的时候

spring之AOP(面向切面编程)

。_饼干妹妹 提交于 2019-12-04 07:28:20
一、简介 何为AOP,通俗的将就是给某些方法执行之前、执行之后等动作发生的时候执行某些操作,在执行这些操作的时候可以获取执行方法的相关信息,简化程序开发中总是重复的东西,比如方法入参出参的日志打印,用户访问权限校验,事务控制等。 二、术语 通知(advice):切面的工作被称为通知。通俗点:什么时候怎么干啥事。 1.前置通知(before):在目标方法被调用之前调用通知功能。 2.后置通知(after):在目标方法完成之后调用通知,此事不会关心方法的输出是什么。 3.返回通知(after-returning):在目标方法成功执行之后调用通知。 4.异常通知(after-throwing):在目标方法跑出异常后调用通知。 5.环绕通知(around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。 连接点(joinpoint):使用通知的地方。 切点(pointcut):匹配通知所要织入的一个或多个连接点。 切面(aspect):通知和切点的结合定义切面的全部内容,它是什么,在何时何处完成其功能。 引入(introduction):可以向现有的类添加新方法和属性。 织入(weaving):把切面应用到目标对象并创建新的代理对象的过程。切面在制定的连接点被织入到目标对象中,在目标对象的生命周期里有多个点可以织入: 1.编译期:切面在目标类编译时织入

静态代理、动态代理、Spring AOP面向切面编程(spring动态代理)、spring动态代理注解版

梦想与她 提交于 2019-12-04 06:51:46
目录 静态代理 列:实现静态代理 代理接口User.java 目标对象 实际业务逻辑实现方法UserImpl.java 代理类UserProxy.java 测试 动态代理 列: 实现动态代理 创建po对象 创建dao 创建代理类 MyProxy.java 测试 Spring Aop 面向切面编程(spring动态代理) 列:aop练习 导包 User.java UserDao.java MyAspect.java切面 bean.xml实现 Spring AOP面向切面编程(spring动态代理注解版) 列:spring动态代理注解版 导包 User.java UserDao.java UserDaoImpl.java beans.xml MyAspect.java Test.java 静态代理 列:实现静态代理 代理接口User.java public interface User { /* * 业务接口 * */ public void work(String workName); public void doing(); //增加接口 } 目标对象 实际业务逻辑实现方法UserImpl.java public class UserImpl implements User{ @Override public void work(String workName) { // TODO

浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

半世苍凉 提交于 2019-12-04 06:12:45
摘自: https://www.cnblogs.com/ChromeT/p/11823735.html 浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~ 目录 简介 AOP概念 Springboot AOP 定义切面类 正常返回测试 异常情况测试返回 画图理解 1、理解切面、切入点、连接点、通知、目标对象 2、理解通知点正常与异常执行顺序 小结 参考: 代码: 回到顶部 简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转、依赖注入、以及AOP切面。当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring框架的,这就说明你有权选择是否要用AOP来完成一些业务。 AOP面向切面编程,通过另一种思考的方式,来弥补面向对象编程OOP当中的不足,OOP当中最重要的单元是类,所以万物皆对象,万物皆是 对象类。而在AOP的模块单元中,最基础的单元是切面,切面对切点进行模块化的管理。 最后再提一句: Spring当中的AOP是利用Java的代理模式实现的 回到顶部 AOP概念 让我们从一些基础的术语开始了解面向切面编程AOP,术语不是特别的直观,最好的方式就是通过文本理解+图像理解+代码实例理解 这样对于我们来说才是真正意义上的理解。 切面: (Aspect) 一个关注点的模块化

spring的面试

我与影子孤独终老i 提交于 2019-12-04 05:34:50
IOC IOC(Inversion Of Controll,控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂,当需要创建一个对象,只需要配置好配置文件/注解即可,不用考虑对象是如何被创建出来的,大大增加了项目的可维护性且降低了开发难度。 AOP AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。使用AOP之后我们可以把一些通用功能抽象出来,在需要用到的地方直接使用即可,这样可以大大简化代码量,提高了系统的扩展性。 Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代理。 Spring AOP / AspectJ AOP 的区别?

AOP xml 配置

99封情书 提交于 2019-12-04 04:02:29
applicationContext.xml <!--切面Bean--> <bean id ="aspectbean" class='"con.softjx.intercept.MyInterceptior'> <!--配置AOP--> <aop:config>   <aop:aspect id="asp" ref="aspectbean" order="1"><!--切面执行顺序-->     <aop:around pointcut-ref="mycut" method="doBasic"/><!--切面配置通知-->     <aop:before pointcut-ref="mycut" method="doBasic"/><!--切面配置通知-->     <aop:after pointcut-ref="mycut" method="doBasic"/><!--切面配置通知-->   </aop:aspect> </aop:config> 来源: https://www.cnblogs.com/gzhbk/p/11829705.html

浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~

二次信任 提交于 2019-12-04 01:39:01
简介 我们都知道,Spring 框架作为后端主流框架之一,最有特点的三部分就是IOC控制反转、依赖注入、以及AOP切面。当然AOP作为一个Spring 的重要组成模块,当然IOC是不依赖于Spring框架的,这就说明你有权选择是否要用AOP来完成一些业务。 AOP面向切面编程,通过另一种思考的方式,来弥补面向对象编程OOP当中的不足,OOP当中最重要的单元是类,所以万物皆对象,万物皆是 对象类。而在AOP的模块单元中,最基础的单元是切面,切面对切点进行模块化的管理。 最后再提一句: Spring当中的AOP是利用Java的代理模式实现的 AOP概念 让我们从一些基础的术语开始了解面向切面编程AOP,术语不是特别的直观,最好的方式就是通过文本理解+图像理解+代码实例理解 这样对于我们来说才是真正意义上的理解。 切面: (Aspect) 一个关注点的模块化,就比较笼统的一个概念,关注点可能横切多个对象。若不理解请往后看图片理解,对应的注解有@Aspect。 连接点: (Joinpoint) 在程序执行过程中某个特定的点,一个连接点总是代表一个方法的执行。 通知: (Advice) 通知表示在一个连接点执行的具体的动作,比如After Before 表明通知的具体动作 切入点: (Pointcut)通过一个表达式去表明我所定义的通知在那个地点具体执行。 前置通知: (Before

Aop面向切面编程的入门总结

别说谁变了你拦得住时间么 提交于 2019-12-04 01:14:59
  aop面向切面编程是一种对于面向对象编程(oop)的补充,关注切面,便于处理日志,减少代码的修改,便于自定义个性化的输出。      1.建立一个接口以及它的实现类,在建立一个代理类,所要显示的日志通过代理类来处理,来调用实现类里的方法。 //接口类public interface BankService { public void transfer(String target, String source, BigDecimal money); } //实现类 public class BankServiceImp implements BankService { public void transfer(String target, String source, BigDecimal money) { } } //代理类public class Objeproxy implements InvocationHandler { private Object target; public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(method.getName() + "被执行参数如下"); for(Object arg:args)

Spring AOP 是什么?

ぃ、小莉子 提交于 2019-12-04 01:06:25
为什么会有面向切面编程(AOP)?我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志、权限验证、事务等功能时,只能在在每个对象里引用公共行为。这样做不便于维护,而且有大量重复代码。AOP的出现弥补了OOP的这点不足。 为了阐述清楚Spring AOP,我们从将以下方面进行讨论: 代理模式 静态代理原理及实践 动态代理原理及实践 Spring AOP原理及实战 1. 代理模式 代理模式:为其他对象提供一种代理以控制对这个对象的访问。这段话比较官方,但我更倾向于用自己的语言理解:比如A对象要做一件事情,在没有代理前,自己来做;在对 A 代理后,由 A 的代理类 B 来做。代理其实是在原实例前后加了一层处理,这也是 AOP 的初级轮廓。 2. 静态代理原理及实践 静态代理模式:静态代理说白了,就是在程序运行前就已经存在代理类的字节码文件、代理类和原始类的关系在运行前就已经确定。废话不多说,我们看一下代码。 package test.staticProxy; // 接口 public interface IUserDao { void save(); void find(); } //目标对象 class UserDao implements IUserDao{ @Override public void