学习笔记(05-01-B):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP-2

一文学会Spring,Spring最简单的入门教程(万字好文) spring教程 阅读详情

前置通知、后置通知、环绕通知和异常通知的实现案例:学习笔记(05-01):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP。以下是第五种通知类型——引介通知的实现
四、IntroductionInterceptor(引介通知):不同于前四种通知类型,前四种通知类型是在目标方法执行前后或者目标方法执行过程中出现异常所进行的一些操作;而引介通知是在目标类中添加一些新的方法和属性而不改变原来的类,应用于修改旧版本程序,增强类功能。
案例: 仍然基于前面的案例(开头给出的链接)进行修改

  1. Create a new Java interface:/AOPProject/src/com/aop/EUserDao.java
package com.aop;

public interface EUserDao {
	public void showUser();

}
  1. Create a new Java class implements EUserDao:/AOPProject/src/com/aop/EUserDaoImpl.java

这段代码中对重写的方法invoke(MethodInvocation arg0)不太理解,望有大神给详细讲一下各部分是什么意思,跪谢,老师也没讲清楚赛。到底怎么个原理

package com.aop;

import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.IntroductionInterceptor;

public class EUserDaoImpl implements EUserDao, IntroductionInterceptor {

	@Override
	public void showUser() {
		// TODO Auto-generated method stub
		System.out.println("-----新增加的方法执行逻辑");
	}

	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		// TODO Auto-generated method stub
			//判定声明参数arg0中的方法的类是否是EUserDao
		if(implementsInterface(arg0.getMethod().getDeclaringClass())) {
			
			//在arg0的方法中调用这个(this)类里的方法
			return arg0.getMethod().invoke(this,arg0.getArguments());
		}else {//执行arg0里的方法
			return arg0.proceed();
		}
		
	}

	@Override
	public boolean implementsInterface(Class<?> arg0) {
		// TODO Auto-generated method stub
		//如果arg0是EUserDao类型返回true,否则返回false
		return arg0.isAssignableFrom(EUserDao.class);
	}

}

3.设置配置文件:/AOPProject/resource/applicationContext.xml

配置方式与前四种有所不同,但是我还没搞清楚什么意思,就是没搞清楚是什么原理,怎样的运行机制,跟EUserDaoImpl怎么个配合法,是如何运行的,再次跪求大神解答,给俺具体讲讲

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
	 <!-- target object -->
	 <bean id="userDao1" class="com.aop.UserDaoImpl"></bean>
	 
	 <bean id="eUserDao" class="com.aop.EUserDaoImpl"></bean>
	 
	 <!-- 切面 -->
	 <bean id="logAspect1" class="com.aop.LogAspect"></bean>
	 <bean id="logBeforeAspect" class="com.aop.LogBeforeAspect"></bean>
	 <bean id="logAfterAspect2" class="com.aop.LogAfterAspect"></bean>
	 <bean id="logThrowingAspect" class="com.aop.LogThrowingAspect"></bean>
	 
	 <bean id="userDaoAspect" class="org.springframework.aop.support.DefaultIntroductionAdvisor">
	 	<constructor-arg ref="eUserDao"></constructor-arg>
	 	<constructor-arg value="com.aop.EUserDao"></constructor-arg>
	 </bean>

	 <!-- 使用AOP代理设置关联 -->
	 <bean id="userDaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	 	<!-- 代理接口 -->
	 	<property name="proxyInterfaces" value="com.aop.UserDao"/>
	 	<!-- 目标对象 -->
	 	<property name="target" ref="userDao1"></property>
	 	<!-- 切面 -->
	 	<!-- <property name="interceptorNames" value="logAspect1"></property> -->
	 	<property name="interceptorNames">
	 		<list>
	 			<value>logBeforeAspect</value>
	 			<value>logAfterAspect2</value>
	 			<value>logAspect1</value>
	 			<value>logThrowingAspect</value>
	 			
	 			<value>userDaoAspect</value>
	 		</list>
	 	</property>
	 	<!-- 判断目标是否为类 -->
	 	<property name="proxyTargetClass" value="false"></property>
	 </bean>
</beans>
  1. 测试:/AOPProject/src/com/aop/TestUserDao.java
package com.aop;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class TestUserDao {

	@Test
	void testAddUser() {
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = context.getBean("userDaoproxy",UserDao.class);
		userDao.addUser("csdn", "Fan_zm");
		((EUserDao)userDao).showUser();
	}

}

最后,再次跪求大神解决疑问,感激不尽

Java之AOP面向切面编程(手动动态代理实现) 1、什么是AOP? AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 可能现在就开始懵B了,什么是面向切面编程?动态代理又是什么? 所以我不打算先解释概念了,直接举个栗子先!接着往下看哈! 2、什么是面向切面编程? 对于面向对象编程,相信大家都比较熟悉吧,直白的讲就是将数据与数据相应的操作进行... 阅读详情

相关推荐

第6章 初识Spring框架

本章主要讲解了Spring框架的基础知识,首先介绍了Spring框架基础知识,包括了Spring概述、Spring框架的优点、Spring框架的体系结构、Spring 5的新特性和Spring下载及目录结构;然后编写了Spring的入门程序;最后讲解了控制反转与依赖注入,包括控制反转的概念、依赖注入的概念、依赖注入的类型和依赖注入的应用。通过本章的学习,读者可以对Spring框架的基础有个大致的了解,为框架开发打下坚实基础。 ...

小猪宝宝的博客 2739

SpringAOP中的IntroductionInterceptor

Introduction(引入)是个特别的Advice,类通过使用AOP中的org.springframework.aop.IntroductionInterceptor在不改变原有方法的基础上却可以增加新的方法。IntroductionInterceptor继承了MethodInterceptor和DynamicIntroductionAdvice接口,其中implementsInterface

鹤啸九天 5436

phpstudy自定义安装mysql8.3并启动

下载压缩包文件然后按下面的图片一步一步操作选择版本,选择第一个压缩包文件,下载下载完成后,解压到phpstudy环境目录下

互联网碎碎念 2802

Spring AOP面向切面编程

Aspect Oriented Programming with Spring Aspect-oriented Programming (AOP) complements Object-oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit .

m0_65402982的博客 317

5个IO口驱动188数码管:查理复用算法在TM52F1363上的极致应用

本文深入解析了如何利用查理复用算法,在TM52F1363单片机上仅用5个IO口驱动188数码管。通过精密的硬件连接与软件时序控制,结合高阻态和动态扫描策略,实现了在极致资源限制下的稳定显示,为成本敏感型嵌入式产品提供了高效的IO复用解决方案。

numpy6sculptor的博客 477

【Linux】软件控制USB重新上电、加载:usbreset、hubpower、uhubctl

使用命令控制USB的供电、复位

郭老二 2186

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

Spring:出现在2002年左右,降低企业级开发难度。帮助进行模块之间、类与类之间的管理,帮助开发人员创建对象,管理对象之间的关系。2003年传入国内,被大量使用。2017出现新的流行框架SpringBoot,核心思想与Spring相同。核心技术:IoC、AOP,能使模块之间、类之间解耦合。依赖:class A使用class B的属性或方法,称之为class A依赖class B。官网:spring.io2.Spring框架的特点。

老男孩的架构路 221

60、新型共轴直升机建模与事件触发积分强化学习研究

本文研究了新型共轴直升机的动力学建模与控制方法,基于牛顿-欧拉方程建立了6自由度非线性模型,并设计了四通道闭环控制器实现稳定飞行。同时,提出一种事件触发积分强化学习方法,用于解决非零和博弈中的最优跟踪控制问题,在减少通信开销的同时保证系统性能。通过仿真验证了控制器的轨迹跟踪能力,并证明了算法下跟踪误差与神经网络权重估计误差的一致最终有界性。两种方法协同可提升飞行器的自主性与鲁棒性,未来可拓展至多智能体协作、智能交通等复杂系统应用。

rl6adventurer的博客 118

Spring AOP 事务

容器、AOP和事务

2404_88294688的博客 1592

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1402

IGBT基础知识及应用电路仿真(Multisim)

本文系统介绍了IGBT(绝缘栅双极晶体管)及其应用电路。首先详细解析了IGBT的基本结构、工作原理和特性参数,重点阐述了其五层半导体结构、电导调制效应和电压驱动特性。随后通过Multisim仿真展示了IGBT在四种典型功率变换电路中的应用:半桥驱动电路实现隔离式互补驱动;全桥逆变电路完成DC-AC转换;三相桥式逆变电路生成三相交流电;直流斩波电路(BUCK/BOOST/BUCK-BOOST)实现电压升降变换。文章通过理论分析与仿真波形相结合,全面呈现了IGBT在中高压大功率场景下的优异性能和灵活应用。

XU157303764的博客 1218

面试题,说说你对spring IOC和AOP的理解

https://blog.youkuaiyun.com/s20081294/article/details/44677387 在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。 回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用 以下是个人的一些总结,仅供参考。 1.IOC...

qq_32534441的博客 2万+

使用OpenGL加载和显示DXF格式的3D模型文件编程

这样,我们就完成了使用OpenGL加载和显示DXF格式的3D模型文件的编程。通过实现加载函数和绘制回调函数,我们能够读取DXF文件的数据并使用OpenGL绘制出来。请注意,这只是一个简单的例子,仅涵盖了基本的加载和显示功能。在本文中,我们将探讨如何使用OpenGL编程加载和显示DXF(Drawing Exchange Format)格式的3D模型文件。DXF是一种通用的CAD(计算机辅助设计)文件格式,常用于存储和交换2D和3D图形数据。使用OpenGL加载和显示DXF格式的3D模型文件编程。

2301_79331421的博客 412

Spring全家桶笔记,这是真的强!

Spring出现在2002年左右,降低企业级开发难度。帮助进行模块之间、类与类之间的管理,帮助开发人员创建对象,管理对象之间的关系。2003年传入国内,被大量使用。2017出现新的流行框架SpringBoot,核心思想与Spring相同。核心技术IoC、AOP,能使模块之间、类之间解耦合。依赖classA使用classB的属性或方法,称之为classA依赖classB。官网spring.io2.Spring框架的特点轻量。...

老男孩的架构路 304

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 548

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

AOP(面向切面编程)

它可将切面类的方法切入到其他类的方法中,比如通过动态代理实现,当被切入方法(如 A.say ())被调用时,切面类的相关方法(如切面类 B 的 study ())会在其前后自动执行,这区别于直接调用切面类方法。:在切点上执行的代码,有前置(Before)、后置(After)、环绕(Around)、异常(Throws)、最终(AfterReturning)等类型,分别在方法执行前、后、前后、抛出异常后、正常返回后执行。:对于频繁调用的切面方法,可考虑优化其内部逻辑,减少不必要的计算或资源消耗。

weixin_64368818的博客 1038

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring框架之AOP编程

1.介绍:AOP:面向切面编程,采取横向抽取机制,取代了传统纵向继承体系重复性代码。 2.AOP实现原理 aop底层将采用代理机制进行实现。 接口 + 实现类:spring采用 jdk 的动态代理Proxy。 实现类:spring 采用 cglib字节码增强。 3.AOP术语 target目标类:需要被代理的类。例如:UserService Joinpoint连接点:所谓连接点是指那些可能被拦截...

qq_43085979的博客 229

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【SSM学习】01-3-Spring AOP

SSM(B站黑马)学习笔记 01-3-Spring AOP

weixin_48074431的博客 663

彻底整垮Aop面向切面编程的原理和使用

aop面向切面编程, 切面关键三要素 1、切面的功能代码,切面干什么 2、切面执行的位置,使用Pointcut表示切面执行的位置 3、切面执行的时间,使用advice表示时间,在目标方法之前,还是之后执行1、Aspect :切面,表示增强的功能,就是一堆代理 ,完成一个功能,非业务功能,常见的有日志,事务 2、JoinPoint 连接点,连接业务方法和切面的位置,就是某个类中的业务方法 3、Pointcut 切入点,指多个连接点方法的集合,多个方法 4、目标对象:给哪个类的方法增加功能,这个类就是目

weixin_43860634的博客 598

Spring AOP趣谈

##1、什么是AOP AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角。 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)。 ##2、AOP的基本概念 Aspect(切面):通常是一个类,里面可以定义切入点和通知 JointPoint(连接点):程序执行过程中

weixin_46822085的博客 321

Spring源码解析-AOP面向切面编程(一)—— 基本应用

AOP面向切面编程是Spring另外一个重要的概念,对AOP的理解对我们后续学习Spring的事物管理有很大帮助,Spring的事物管理就是通过AOP来实现的,在本篇博客中,通过一些简单的例子来开启AOP面向切面编程之旅。接下来通过注解方式实现AOP和Xml配置文件实现AOP两个方式来了解下面...

chengpaoqun3102的博客 333

AOP面向切面编程

点击打开链接 posts - 14, comments - 57, trackbacks - 0, articles - 0    2016年7月 > 日 一 二 三 四 五 六 26 27 28 29 30 1 2 3 4 5 6

小青青的技术之家 1048

Spring aop切面编程

4,异常通知@AfterThrowing在目标方法出现异常时执行,如果方法没有异常出现,则不执行。在spring的aop中,指的是业务层的类的所有现有方法。在类中有很多方法可以被增强,但是实际开发中,我们增强的往往就那几个,那么这些被实际增强的方法叫切入点。2,后置通知@AfterReturning()原来方法执行之后,特点可以得到被增强方法的返回值。3,环绕通知@Around在方法之前和之后执行,特点可以阻止目标方法执行。5,最终通知@After()无论方法是否有异常,总是被执行的。...

qq_42572322的博客 373

03Spring AOP

阅读导航。

本人主攻Java,希望自己能成为出色的程序员。 242

Spring(三)、AOP面向切面

·springaop面向切面编程

qq_61026557的博客 368
上一篇: 学习笔记(05-01):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用Spring通知类型创建Spring AOP
下一篇: 学习笔记(05-02):轻松搞定Spring全家桶(初识篇)-面向切片编程AOP:使用AspectJ基于XML开发AOP
Fan_zm
博客等级 码龄9年 1粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值