aop

spring aop 及实现方式

梦想的初衷 提交于 2020-02-28 13:50:16
一、AOP的基本概念: 1、什么是aop: AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。 在不改变原有的逻辑的基础上,增加一些额外的功能。代理也是这个功能,读写分离也能用aop来做。 AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度

Spring之AOP

旧时模样 提交于 2020-02-28 12:56:04
简介 1、概念 AOP: Aspect-Oriented Programming 面向切面编程,是OOP面向对象编程的一种补充。 将程序宗交叉业务逻辑(事物、日志)代码提取出来,封装成切面,有AOP容器在适当时机(代码位置)将封装的切面动态的织入到具体业务逻辑中。 AOP不是Spring特有的,C++等也有。 2、应用场合 适用于具有横切逻辑的场合,如事物管理、日志管理、性能检测、异常通知、访问控制等。 3、作用 1)不改变原有代码的基础上动态添加新的功能。 2)模块化 4、术语 连接点Joinpoint : 程序执行的某个特定的位置,如方法调用前、方法调用后、方法抛出异常时、方法调用前后等。 切入点: 定位查找到需要的连接点,即切入点。一个切入点可包含多个连接点。 增强 Advice : 在切点上执行的一段程序代码,用来实现某些功能。 目标对象 target: 将执行增强处理的目标类。 织入 weaving: 将增强添加到目标类具体切入点上的过程。 代理 proxy: 一个类被织入增强之后,会产生代理类。 切面 aspect: 切点和增强的组合就叫做切面。 引介 Introduction 也称为引入: 可以为一个类添加一些属性和方法,但是一般不建议使用。 重点理解切入点、增强、目标对象 的概念 实现原理 1、代理模式 概念:为其他对象提供一种代理,以控制对这个对象的访问

Spring Aop深度解析(未完...)

跟風遠走 提交于 2020-02-28 09:54:36
Spring Aop深度解析 关于spring Aop也接触了好多知识了,在此,做一个总结,以便学习 。 Spring Aop是什么? AOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。 基本术语: (1) 切面(Aspect) 切面是一个横切关注点的模块化,一个切面能够包含同一个类型的不同增强方法,比如说事务处理和日志处理可以理解为两个切面。切面由切入点和通知组成,它既包含了横切逻辑的定义,也包括了切入点的定义。 Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。 @Component @Aspect public class LogAspect { } 可以简单地认为, 使用 @Aspect 注解的类就是切面 (2) 目标对象(Target) 目标对象指将要被增强的对象,即包含主业务逻辑的类对象。或者说是被一个或者多个切面所通知的对象。 (3) 连接点(JoinPoint) 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。连接点由两个信息确定:

3.01、Spring AOP的理解

余生长醉 提交于 2020-02-27 12:20:49
注:转 https://mp.weixin.qq.com/s/PsgTLn8cdTxdd542XgVkUA 什么是AOP AOP(Aspect-Oriented Programming), 即 面向切面编程 , 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面) 1、Aspect(切面) Aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中. AOP的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 1. 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 2. 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. 2、Advice(增强) 由 aspect 添加到特定的 join point(即满足 point cut 规则的 join point) 的一段代码. 许多 AOP框架, 包括 Spring AOP, 会将

实例探究Aspectj,解析SentinelResourceAspect

随声附和 提交于 2020-02-27 11:07:49
为了学习SentinelResourceAspect,这篇文章里我用Aspectj实现一个AOP实例,一起来看下。 Sentinel 提供了 @SentinelResource 注解用于定义资源,支持 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。 SentinelResourceAspect是Sentinel中的核心切面,Sentinel对限流,拦截等的支持都依赖 SentinelResourceAspect,本文回顾AOP相关知识,实现一个AspectJ实例,然后带你从源码角度,探究SentinelResourceAspect的实现。 1、回顾 Spring AOP 知识 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 常见使用场景 性能监控 在方法调用前后记录调用时间,方法执行太长或超时报警。 缓存代理 缓存某方法的返回值,下次执行该方法时,直接从缓存里获取。 软件破解 使用AOP修改软件的验证类的判断逻辑。 记录日志 在方法执行前后记录系统日志。 工作流系统

Spring5学习(六)Spring 事务

家住魔仙堡 提交于 2020-02-27 08:27:11
Spring 事务 1. 事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 事务是恢复和 并发控制 的基本单位。 2. 为什么要事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 3. 事务的4个特性(ACID) 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID特性 。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。指一个事务一旦提交

Spring Boot的动态代理AOP原理

只愿长相守 提交于 2020-02-27 08:13:41
前言 Spring AOP使用了动态代理技术,动态代理在业界比较流行的实现方式有,CGLIB,Javassist,ASM等等。 Spring动态代理实现方式 Spring采用了JDK和CGLIB两种方式,我们一般都是接口,配实现类,对应这种方式Spring采用的代理方式是JDK代理,如果实现类没有使用接口,就一个实现类的话就采用CGLIB代理。 个人微信公众,经常更新一些实用的干货: 来源: oschina 链接: https://my.oschina.net/u/4115084/blog/3164110

Java类型转换报错java.lang.ClassCastException: com.sun.proxy.$Proxy7 cannot be cast to

岁酱吖の 提交于 2020-02-27 01:40:17
类型转换异常 java.lang.ClassCastException: com.sun.proxy.$Proxy7 cannot be cast to 这个错误的原因只有一个类型转换异常。 在一个子类实现父类的接口时,并且在强制转换时一定要使用父类的接口,否则就会报这个错误。 接口代码 package com.xxr.mapper; public interface UserMapper { void AddUser(); void SelectUser(); void DeleteUser(); void UpUser(); } 子类代码 package com.xxr.mapper.Impl; import com.xxr.mapper.UserMapper; public class UserImpl implements UserMapper { public void AddUser() { System.out.println("增加"); } public void SelectUser() { System.out.println("查询"); } public void DeleteUser() { System.out.println("删除"); } public void UpUser() { System.out.println("修改"); } }

SSM整合

不羁的心 提交于 2020-02-26 22:23:22
目录 一. 项目准备 01-需求 02-数据库脚本 03-项目结构 04-Maven依赖 二.Java源代码 01-domain-实体类 02-dao-持久层 03-Service-服务层 04-controller-控制器 三.Resources配置资源 01-MySQL连接信息配置 02-日志记录配置 03-SpringMVC配置 04-SSM整合配置 05-Mybatis操作Sql配置 四.Web 01-目录结构 02-服务器启动后相关配置 03-首页操作JSP页面 04-展示账户列表页面 五.SSM基本架构代码下载 一. 项目准备 01-需求 02-数据库脚本 create database ssm; create table account( id int primary key auto_increment, name varchar(100), money double(7,2), ); INSERT INTO account(NAME,money)VALUES("小雪",1000); INSERT INTO account(NAME,money)VALUES("丽丽",1000); 03-项目结构 04-Maven依赖 pom.xml文件中添加依赖 <properties> <project.build.sourceEncoding>UTF-8</project