回顾SpringAop

Spring【 Spring整合MyBatis、SpringAOP(AOP简介 、AOP相关术语、AOP入门)】(五)-全面详解(学习总结---从入门到深化) Spring【Spring整合MyBatis(准备数据库和实体类、编写持久层接口和service类、Spring整合Junit进行单元测试、自动创建代理对象)、SpringAOP(AOP简介、AOP相关术语、AOP入门)】(五)-全面详解(学习总结---从入门到深化) 阅读详情

首先回顾几个名词,能用通俗的话来讲就用通俗的来讲

切面:比如事务,我们要把它单独模块化出来实现,不想影响业务逻辑,那么这个时候我们给业务逻辑添加进入这个事务的功能,它就是切面

连接点:可以让切面具体实现的一些位置集合称为连接点

切点:具体切面切入的位置,为切点

通知:切面要完成的工作,比如事务,保存数据库的正确操作

引入:向现有的类添加属性合方法

织入:把切面应用到目标对象,并创建新的代理对象的过程,在目标对象生命周期里有多个点可以织入:1.编译器 2.类加载器 3.运行期


Spring提供了4种类型的AOP支持

1.基于代理的经典SpringAop

2.纯POJO切面

3.@AspectJ注解驱动的切面

4.注入式AspectJ切面

前3种Spring对AOP的直接局限于方法拦截


PS:Spring只有在需要应用到代理对象才创建它,但是Spring上下文加载后就会完成初始对象的创建


SpringAOP一般使用Spring结合AspectJ,但是SpringAOP并不能使用所有的AspectJ的功能


下面是Spring可以使用AspectJ的一些节点

arg(),@args(),execution(),this(),target(),@target(),within(),@within(),@annotation()


AspectJ有5个重要的通知

1.前置通知

2.后置通知

3.异常通知

4.返回通知

5.环绕通知


继续注解的形式贴上代码:

<运行结果>:

beforeAssit
start living...
afterAssit
returnAssit


I am in before
start having...
I am in returning
I am in after


next one:sam
welcome : sam

package Model;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class Assit {
	//自定义切点
	@Pointcut("execution(* Model.Hotel.live(..))")
	public void rest(){}
	@Pointcut("execution(* Model.Hotel.having(..))")
	public void having(){}
	@Pointcut("execution(* Model.Hotel.welcomeImportantPerson(String))"
			+ "&&args(name)")
	public void welcome(String name){}
	//前置通知 
	@Before("rest()")
	public void beforeAssit(){
		System.out.println("beforeAssit");
	}
	//后置通知
	@After("rest()")
	public void afterAssit(){
		System.out.println("afterAssit");
	}
	@AfterReturning("rest()")
	//返回通知
	public void returnAssit(){
		System.out.println("returnAssit");
	}
	@AfterThrowing("rest()")
	//异常通知
	public void exceptionAssit(){
		System.out.println("exceptionAssit");
	}
	//环绕通知
	@Around("having()")
	public void arroundAssit(ProceedingJoinPoint pp){
		System.out.println("I am in before");
		try {
			pp.proceed();
			System.out.println("I am in returning");
		} catch (Throwable e) {
			System.out.println("I am in exception");
			e.printStackTrace();
		}
		System.out.println("I am in after");
	}
	@Before("welcome(name)")
	public void beforeWelcome(String name){
		System.out.println("next one:"+name);
	}
}

package Model;

public interface Hotel {
	void live();
	void having();
	void welcomeImportantPerson(String name);
}

package Model;

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service("hi")
@Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class HotelImp implements Hotel{

	@Override
	public void live() {
		// TODO Auto-generated method stub
		System.out.println("start living...");
	}

	@Override
	public void having() {
		// TODO Auto-generated method stub
		System.out.println("start having...");
	}

	@Override
	public void welcomeImportantPerson(String name) {
		// TODO Auto-generated method stub
		System.out.println("welcome : "+name);
	}
	
}





攻防实战之Confluence后利用 这边管理员密码是密文加密在数据库中,解不开,因此解决的思路是将管理员用户密码修改为已知明文密码的密文(这边不能直接在数据库中添加字段,关系型数据库在单表中添加一条字段可能会出现问题),登录上后台以后,添加用户并加入管理员组,最后将管理员密码还原。Confluence的后利用主要问题在于在Linux中搭建时,默认是Confluence用户权限,如下图所示,而confluence在linux中是没有写权限的,这也就是为什么有些人发现可以执行命令但是shell写不进去。至此admin的密码被改为了123123。 阅读详情

相关推荐

SpringBoot实战——仿b站项目(一)

热部署就是当应用程序这种运行的时候升级冉家或者修改某一部分代码、配置文件时,无需手动启动应用,即可修改的部分生效工具 + IDEA配置。

weixin_52880572的博客 3456

SpringAOP(图文详解)

Spring实现的AOP是代理模式,给调用者使用的实际是已经过加工的对象,你编程时方法体里只写了A,但调用者拿到的对象的方法体却是xAy。x和y总还是需要你来写的,这就是增强。x和y具体在什么时候被调用总还是需要你来规定的,虽然是基于约定的声明这种简单的规定,这就是切点。

lhj520cb的博客 5万+

基于Spring Boot框架的网上蛋糕销售系统

随着互联网的普及和电子商务的迅猛发展,网上购物已经成为人们日常生活的一部分。蛋糕作为一种受欢迎的食品,其销售市场也逐渐向网络化方向发展。网上蛋糕销售系统能够打破时间和地域的限制,让消费者随时随地浏览和购买蛋糕,同时也为蛋糕商家提供了一个展示和销售产品的平台。该系统的开发旨在提高蛋糕预定和销售的便捷性,节约时间和经济成本,并推动蛋糕市场的进一步发展。开发语言:Java,一种面向对象的编程语言,具有跨平台性、稳定性和安全性等特点,适用于构建大型、复杂的Web应用程序。 框架:Spring Boot,一个基于Sp

2301_81127431的博客 997

图文详解Spring AOP,你学会了吗?

如果说 IOC 是 Spring 的核心,那么面向切面编程AOP就是 Spring 另外一个最为重要的核心,需要重点掌握@mikechen 本篇主要会详解以下六点: 1.AOP的定义 2.AOP的作用 3.AOP的应用场景 4.Spring AOP的术语 AOP核心概念 Spring AOP 通知分类 Spring AOP 织入时期 5.Spring AOP三种使用方式 方式1:使用Spring自带的AOP 方式2:使用Aspectj实现切面(普通POJO的实现方式) 方式3:使用As

qq_39652397的博客 3489

Arduino IDE 2.3.2 配置 UNO R4 WIFI 开发环境避坑指南(附LED矩阵驱动测试)

本文详细介绍了如何在Arduino IDE 2.3.2中配置UNO R4 WIFI开发环境,并提供了LED矩阵驱动的实战指南。从开发环境搭建到硬件连接,再到LED矩阵的初始化和弹球动画实现,手把手教你避开常见配置陷阱,最终实现流畅的动画效果。特别适合刚接触UNO R4 WIFI的开发者快速上手。

weixin_28675839的博客 220

QuickFix Java 讲解(一)概述、下载方法,和协议内容

本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 1. 什么是FIX,QuickFix,Quick Java? 1.1. 什么是FIX 官网以及其他翻译自官网的帖子都太官方了,这里我们设想一个情景: 你是一个交易员,现在客户打电话来让你下个单买点股票。你啪啪啪的在你的机器上熟练地输入了下单指令。系统显示:成...

4574

SpringAOP学习--SpringAOP简介及原理

为了标准化AOP,Spring引入了一套AOP顶级API--AOP联盟,用来定义和使用AOP。底层根据配置生成JDK或CGLIB动态代理对象。SpringAOP不是一种新的AOP实现,使用JDK动态代理和CGLIB动态代理实现SpringAOP配置方式核心是Advisor,可以自定义Advisor,也可以通过AspectJ间接定义AdvisorSpringAOP的实现遵循了AOP联盟规范,AOP联盟顶级API接口贯穿了整个AOP过程httpshttpshttpshttpshttps。...

drhrht的博客 4392

数学建模美赛O奖论文研读启示录——从模仿开始

数学建模美赛O奖论文哪些地方比较出彩?我们可以从中学到什么东西?可以从哪些地方进行模仿?我总结了一些O奖论文里我认为比较好的地方,跟大家一起学习交流!

小宇的修炼之路 5429

Spring之AOP的详细讲解

本文讲解的是SpringAOP,将切点、切面、通知点,逐步剖析,代码举例,配合理解!

tq02的博客 8894

从零到一:手把手教你用Verilog在FPGA上构建自己的FFT处理器(不依赖IP核)

本文详细介绍了如何从零开始使用Verilog在FPGA上构建256点FFT处理器,不依赖商业IP核。内容涵盖FFT算法基础、蝶形运算单元设计、整体架构实现、时序收敛优化策略以及测试验证方法,重点提升FPGA上算法部署的运行效率与资源利用率。

vv45678的博客 822

CMake入门教程【基础篇】在Windows、Linux上安装CMake

CMake如何下载与安装

小鱼酱的博客 2727

Spring高手之路18——从XML配置角度理解Spring AOP

本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

unitree-G1外接 USB 麦克风完整配置指南

首先,将type-c麦克风插入G1机器人的USB口后,记录下USB麦克风的卡号(card)和设备号(device),通常显示为 card 1: Device [USB Audio Device]

m0_47999117的博客 599

SpringAop回顾

1:概念 连接点:joinpoint 切入点:pointcut 增强:advice 目标对象:target 织入 wave 代理 proxy 切面 aspect 需要导入依赖:spring-aspect 基于注解的AOP配置 在springxml配置 <!--开启Spring注解扫描--> <context:component-scan base-package="com.qf"/> 四种基本通知,和环绕通知 public class MyAdvi

qq_45935397的博客 297

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[项目回顾]基于Annotation与SpringAOP的缓存简单解决方案

[项目回顾]基于Annotation与SpringAOP的缓存简单解决方案

Littleree的博客 92

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

回顾SpringAOP的使用方式

一 概述 SpringAOP的实现主要有两种代理方式: 1.基于JDK的动态代理:是面向接口,实现具体的接口,形成代理对象,同时运用到反射机制。 2.基于CGLIB的动态代理:以继承的方式动态生成目标类的代理,基于ASM字节码库实现。 二 SpringAOP的具体实现方式 1. 通过XML配置方式实现 2. 通过注解的方式实现(目前主要的方式) 三 SpringAOP的主要注解 1. @Aspect:用来标注某个类为切面配置类 @Aspect @Component public clas

calm_encode的博客 164

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

回顾SpringAOP的实现原理

一 概述 面向切面编程的织入时机 1. 编译期织入(AspectJ) 2. 类加载加载织入(AspectJ 5+) 3. 运行时(Spring AOP) 二 运行时织入的实现 运行时织入是通过代理对象,代理可以分为了两种: 1. 静态代理 如图,客户端是通过代理对象间接的同目标对象进行交互,换言之,目标对象委托了代理对象同客户端进行交互。 根据类图可知,客户端通过接口来对目标对象或代理对象进行引用,这里就涉及了一个很重要的原则,面向接口编程,这时候就涉及到两个重要的结论: .

calm_encode的博客 315

回顾SpringAOP中的Advice

一 概述 @Before:前置通知 @After :后置通知,方法执行完之后 @AfterReturning:返回通知,完成执行之后 @AfterThrowing:异常通知,抛出异常之后 @Around:环绕通知 二 Advice应用实例 通过环绕通知获取方法执行时间 @Component @Aspect public class RepositoryAspect { @Pointcut("execution(* com.repository..*(..))") p...

calm_encode的博客 233

回顾SpringAOP,简单的测试,加深理解

首先导入Spring的包,我是直接用MyEclipse导入了,我用的是Spring3.0 然后创建applicationContext.xml,进行配置 afteradvice regex arounadvice .*sell.*

Welcome to IronC's Blog 336

Java回顾:springAOP、声明式事务

Java回顾:springAOP、声明式事务

m0_56678122的博客 450

Spring AOP 总结一

AOP是一种编程思想,用于将程序中的横切关注点(如事务、日志)从业务逻辑代码中分离出来,以提高代码得可重用性和可维护性。Spring框架对其进行了实现。在Spring中AOP是通过代理模式实现的,即在运行时动态的生成一个代理,这个代理类会拦截目标对象的方法调用,并在方法执行前后添加响应的横切逻辑

java_lover20111106的博客 1064

Spring AOP面向切面编程原理回顾小结I

1.面向切面编程是指将需要在相同位置复用的代码提取出来形成切面,然后定义各种类型的增强处理方法并通过代理设计模式实现增强处理方法在目标方法执行前后进行各种形式的有机结合,这个增强处理方法和目标方法有机结合的过程又叫做织入,从而满足不同场景下切面代码的统一管理和目标方法的统一织入管理。切面是一个横切逻辑,由各种类型的增强处理方法组成,比如常用的前置增强后置增强,异常抛出增强,环绕增强,最终增强等。横切逻辑指的是目标方法和织入的增强处理方法通过各种形式封装结合在一起的工作单元。

田宝宝的博客 196

子类重写方法aop切不到_Spring5.0源码深度解析:SpringBean的Aop通知调用链源码分析,小白都能看懂...

点击上方“Java分享吧”,选择“设为星标”优选有价值的技术文献,从我做起源码分析篇章SpringAOP原理探究思考:springAOP底层运用了什么设计模式?生成代理类:代理设计模式、底层五个通知形成调用链采用:责任链设计模式下面我们回顾下SpringAop实现流程:1、配置@EnableAspectJAutoProxy:开启AOP权限2、@Import(AspectJAutoProx...

weixin_39619478的博客 176

eclipse aop连接点joinpoint方法点不出来_Spring Boot如何利用AOP巧妙记录操作日志?

本篇要点简要回顾SpringAOP的相关知识点:关键术语,通知类型,切入点表达式等等。介绍SpringBoot快速启动测试AOP,巧妙打印日志信息。简单回顾SpringAOP的相关知识点SpringAOP的相关的知识点包括源码解析,为了加深印象,这边再做一个简短的回顾:1、AOP关键术语切面(Aspect):也就是我们定义的专注于提供辅助功能的模块,比如安全管理,日志信息等。连接点(JoinPoi...

weixin_39531635的博客 286

实例探究Aspectj,解析SentinelResourceAspect

为了学习SentinelResourceAspect,这篇文章里我用Aspectj实现一个AOP实例,一起来看下。 Sentinel 提供了 @SentinelResource 注解用于定义资源,支持 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。 SentinelResourceAspect是Sentinel中的核心切面,Sentinel对限流,拦截等的支持都依...

ting2909的博客 676

学习笔记:静态代理/动态代理

可以在运行时拦截到对代理对象方法的调用,并且可以在这个调用前后执行一些逻辑,比如日志记录、权限控制等。它允许在运行时创建代理类,并且可以将方法调用路由到其它的代码,通常是一个代理类实现的方法。今日javaweb看到AOP时突然复习到javaSE的代理的概念,忘记了,这里再回顾一下(我甚至觉得是我自己没学过)简单的代理模式不用到反射机制,代理类在编译时已经确定,所以不能动态的支持多个类的代理。当需求不只这一个对象时,我们可以利用反射机制,获取该类,动态的进行代理。是Java动态代理机制的一个关键接口。

m0_52158439的博客 325
上一篇: Spring bean管理【基于注解】
下一篇: SpringAOP使用注解引入新功能
SnakeMoving
博客等级 码龄11年 65粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值