Spring学习-20:Spring的AOP:自动代理

Spring框架之AOP代理(半自动、全自动配置) 在Java之AOP面向切面编程(含手动代理实现Demo)实现了手动Proxy动态代理,在Spring框架之AOP(cglib字节码增强)实现了利用cglib字节码增强代理,以上两种方式与spring框架没有太大关系,手动配置的过程比较繁琐,其实Spring框架已经帮我们封装好了,我们只要在beans.xml进行配置即可。 建议仔细看一下AOP面向切面编程(含手动代理实现Demo),里面介绍了切面、... 阅读详情

前面所讲的代理,都必须手动配置。下面来介绍一下自动代理。

前面的案例中,每个代理都是通过ProxyFactoryBean织入切面代理,在实际开发中,非常多的Bean每个都配置ProxyFactoryBean开发维护量巨大。自动创建代理(*****基于后处理Bean.在Bean创建的过程中完成的增强.生成Bean就是代理。)

(1)BeanNameAutoProxyCreator根据Bean名称创建代理

(2)DefaultAdvisorAutoProxyCreator根据Advisor本身包含信息创建代理

*AnnotationAwareAspectJAutoProxyCreator 基于Bean中的AspectJ 注解进行自动代理

之前我们手动创建代理的时候,注意到一点,都是先创建被代理对象,然后在创建代理的时候,传入该被代理对象。

而下面要学习的两种自动代理,是基于后处理bean,在类创建的过程中完成增强,生成的bean,就是代理!

1、如下所示,先清理配置文件中其他部分,留下最简洁的四个bean配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:p="http://www.springframework.org/schema/p"
       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.xsd">
<!-- 定义目标对象 -->
<bean id="orderDao" class="com.helloAOP.regexp.OrderDao"></bean>
<bean id="customerDao" class="com.helloAOP.regexp.CustomerDaoImpl"></bean> 
<!-- 定义增强 -->
<bean id="aroundAdvice" class="com.helloAOP.regexp.MyAroundAdvice"></bean>
<bean id="beforeAdvice" class="com.helloAOP.regexp.MyBeforeAdvice"></bean>    
</beans>
2、下面使用自动代理。如上所述有两种方式,基于名称、基于AspectJ注解信息。 2.1、基于名称

<!-- 自动代理:按名称代理 基于后处理bean,后处理bean不需要配置ID-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	<property name="beanNames" value="*Dao"/>
	<property name="interceptorNames" value="beforeAdvice"/>
</bean>
编写测试类:

package com.helloAOP.autoProxy;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.helloAOP.regexp.OrderDao;

public class TestDemo2 {
	@Test
	public void testDemo(){
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext2.xml");
		OrderDao orderDao = (OrderDao)applicationContext.getBean("orderDao");
		orderDao.add();
		orderDao.update();
		orderDao.delete();
		orderDao.find();
		applicationContext.close();
	}
}
运行测试:


成功。

2.2、基于AspectJ注解信息,根据切面中定义的信息来生成代理。

修改配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:p="http://www.springframework.org/schema/p"
       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.xsd">
<!-- 定义目标对象 -->
<bean id="orderDao" class="com.helloAOP.regexp.OrderDao"></bean>
<bean id="customerDao" class="com.helloAOP.regexp.CustomerDaoImpl"></bean> 
<!-- 定义增强 -->
<bean id="aroundAdvice" class="com.helloAOP.regexp.MyAroundAdvice"></bean>
<bean id="beforeAdvice" class="com.helloAOP.regexp.MyBeforeAdvice"></bean>
<!-- 定义一个带有切点的切面 -->
<bean id="myPointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
	<property name="pattern" value=".*add.*"></property>
	<property name="advice" ref="aroundAdvice"></property>
	</bean>
<!-- 自动代理:-->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>  
</beans>
编写测试类:

package com.helloAOP.autoProxy;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.helloAOP.regexp.OrderDao;

public class TestDemo3 {
	@Test
	public void testDemo(){
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext3.xml");
		OrderDao orderDao = (OrderDao)applicationContext.getBean("orderDao");
		orderDao.add();
		orderDao.delete();
		applicationContext.close();
	}
}

运行测试:

成功。

Spring(十六):创建AOP代理 看完美团、字节、腾讯这三家的一二三面试问题,是不是感觉问的特别多,可能咱们真的又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。开篇有提及我可是足足背下了Java互联网工程师面试1000题,多少还是有点用的呢,换汤不换药,不管面试官怎么问你,抓住本质即可!能读到此处的都是真爱Java互联网工程师面试1000题。 阅读详情

相关推荐

Spring AOP与代理模式

通过。

weixin_43833540的博客 1110

Spring AOP(二) 三种自动代理器

本章会讲解三个自动代理器1、BeanNameAutoProxyCreator(需要写被代理的bean名字,和代理的逻辑类名字)2、DefaultAdvisorAutoProxyCreator(需要继承Advior)3、@EnableAspectJAutoProxy利用注解开启我们先从简单的BeanNameAutoProxyCreator 在看 中等难度的DefaultAdvisorAutoProxyCreator

YokelIM的博客 1647

2025年春科研论文写作指导(如何写好科研论文)研究生网课期末考试

希望能帮助到大家

beijieweiyu的博客 5789

【框架】[Spring]AOP拦截-三种方式实现自动代理

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 这里的自动代理,我讲的是自动代理bean对象,其实就是在xml中让我们不用配置代理工厂,也就是不用配置class为org.springframework.aop.framework.ProxyFactoryBean的...

weixin_34252090的博客 394

UE5抗锯齿实战:如何用TAA解决闪烁问题(附参数优化指南)

本文深入探讨了UE5中TAA(时间性抗锯齿)技术如何有效解决画面闪烁问题,并提供了详细的参数优化指南。通过基础参数配置、高级优化技巧以及材质层面的策略,帮助开发者显著提升视觉质量。文章还介绍了诊断工具链,助力快速定位并解决顽固闪烁问题。

solidity8miner的博客 427

使用HFSS仿真分支波导耦合器

本文介绍了分支波导耦合器的HFSS仿真设计过程。首先给出了器件关键参数(t=0.365mm,l=1.600mm等),详细说明了建模步骤:包括创建中心分支、设置变量参数、镜像复制两侧分支、矩形波导端口设计等操作。重点阐述了激励端口设置方法,包括四个端口的积分线绘制,以及求解频率设定。最后展示了S参数、幅度平衡度和相位差等关键性能指标的仿真结果提取方法。整个设计过程体现了HFSS在微波器件仿真中的参数化建模和结果分析能力。

shao666888的博客 180

spring 中自动代理生成器的实现

本文从源码角度介绍了 spring 中自动代理生成器的实现逻辑,并针对代理的创建、方法的调用及拦截器链的创建做了相关描述,最后总结了不同的代理生成器在整个的代理过程中的相同点和区别。

iCheetor 1322

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1329

springframework(十一)AOP之自动代理

 Spring的Autoproxing (自动代理,注意必须使用ApplicaitonContext来获取bean才能进行自动代理,同时要将cglib.jar给加入到classpath中去)自动代理可以不用为每一个目标对象那个手动定义代理对象,使用自动代理,您可以通过Bean的名称或者是Pointcut对比,自动为符合对比条件的目标对象建立代理对象。1、BeanNameAutoProxyCre

The Last Song 的专栏 2094

GNSS/INS松组合导航实战:如何用卡尔曼滤波提升定位精度(附MATLAB代码)

本文深入探讨了GNSS/INS松组合导航的工程实践,详细阐述了如何利用卡尔曼滤波算法融合卫星与惯性数据以提升定位精度。内容涵盖从仿真环境搭建、误差状态卡尔曼滤波器(ESKF)设计,到状态与观测方程实现、噪声参数调试及常见问题排查的全过程,并提供了可直接运行的MATLAB代码,为开发高精度、鲁棒的组合导航系统提供实战指南。

weixin_29057163的博客 165

【3D目标检测】激光雷达和相机联合标定(一)——ROS同步解包

激光雷达和相机联合标定(一)——ROS同步解包

qq_44703886的博客 4234

Spring与AOP系列四:自动代理生成器

1.自动代理生成器 前面代码中所使用的代理对象,均是由ProxyFactoryBean代理工具类生成的。而该代理工具类存在着如下缺点: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://...

lumaomao_的专栏 281

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1139

Spring AOP 自动代理源码 DefaultAdvisorAutoProxyCreator

前言 前面已经学习了ProxyFactory的源码,学习了如何手动硬编码使用最基础的Spring AOP,以及实现方式。这一节要学习自动代理DefaultAdvisorAutoProxyCreator源码。比起Spring AOP注解形式实现自动代理,我们之前学习的ProxyFactory还差以下2步: 代理时机:在Spring Ioc创建Bean的过程中,寻找合适的时机进行调用Spring A...

bugpool的博客 5332

轨迹优化 | 图解欧氏距离场与梯度场算法(附ROS C++/Python实现)

距离场在运动规划中则常用于地图建模和轨迹梯度优化。本文图解欧氏距离场EDT的算法原理,并基于双线性插值给出欧氏梯度场的公式推导,并给出ROS C++和Python的算法实现加深理解

FRIGIDWINTER的博客 4646

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring AOP之基于AbstractAutoProxyCreator的自动代理

当系统比较复杂,或者中需要进行aop进行织入的bean较多时,简单采用ProxyFacotryBean无疑会增加很多工作量,同时由于要从ProxyFactoryBean获得代理对象,也会使应用和Spring之间的耦合度增加,并且很多时候可维护性不强,譬如,我们需要给bean名字满足“*service”的bean每个方法增加事务功能,如果采用ProxyFacotryBean必须为每个以service

shuangyue的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring AOP源码学习:创建 AOP 代理

目录 前言 AnnotationAwareAspectJAutoProxyCreator AbstractAutoProxyCreator#postProcessAfterInitialization 代码块1:wrapIfNecessary 代码块2:getAdvicesAndAdvisorsForBean 代码块3:findEligibleAdvisors 代码块4:findAdvisorBeans 代码块5:findCandidateAdvisors 代码块6:buildAspect

程序员囧辉 5203

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring-AOP 自动创建代理之BeanNameAutoProxyCreator

导读 实例导读Spring-AOP 自动创建代理实例代码已托管到Github—> https://github.com/yangshangwei/SpringMaster在 Spring-AOP 静态普通方法名匹配切面 案例中,我们通过配置两个ProxyFactoryBean分别为waiter和seller的Bean创建代理对象,如下<?xml version="1.0" encoding="UTF

小工匠 2万+

Spring AOP:自动创建代理

文章目录1.原理介绍:2.BeanNameAutoProxyCreator:3.DefaultAdvisorAutoProxyCreator:总结:  在《Spring AOP 切面开发详解》中演示了Spring中通过切面如何进行横切逻辑的抽取。但是所有的例子,都是通过ProxyFactoryBean创建织入切面的代理,每一个需要被代理的Bean都需要使用一个ProxyFactoryBean进行配...

不能如期而至的专栏 1236

Spring5参考指南:AOP代理

文章目录AOP代理AOP Proxies原理 AOP代理 通常来说Spring AOP有两种代理方式,一种默认的JDK代理,只能代理接口,一种是CGLIB代理,可以代理具体的类对象。 SpringAOP默认为对AOP代理使用标准的JDK动态代理。如果业务对象不实现接口,则使用CGLIB。 如果使用CGLIB,要注意对于CGLIB,不能advice final方法,因为它们不能在运行时生成的子类中被...

程序那些事 1万+

spring aop 自动创建代理BeanNameAutoProxyCreator详解

代码示例 <?xml version=”1.0” encoding=”UTF-8”?> <beans xmlns=”http://www.springframework.org/schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:aop=”http://www.sp

bearman的博客 1万+

【Spring Boot】Spring AOP动态代理,以及静态代理

定义 MethodInterceptor 并重写 intercept 方法, intercept 于增强标方法,和JDK动态代理中的 invoke 方法类似//?标对象, 即被代理对象@Override// 代理增强内容System.out.println("我是中介, 开始代理");//通过反射调?被代理类的方法//代理增强内容System.out.println("我是中介, 代理结束");

2509_92430413的博客 1760

Spring的核心AOP及代理模式(“最易懂得Spring学习”)

????哇咔咔:\textcolor{blue}{哇咔咔:}哇咔咔:在前两篇中我们了解了IOC\textcolor{green}{在前两篇中我们了解了IOC}在前两篇中我们了解了IOC ????接下来就接触一下另一个核心AOP\textcolor{pink}{接下来就接触一下另一个核心AOP}接下来就接触一下另一个核心AOP ????所用到的代码都可以在这里找到???? ????博主也在学习阶段,如若发现问题,请告知,非常感谢\textcolor{Orange}{博主也在学习阶段,如若发现问题,请告知,非常

奔走的王木木Sir的博客 1317

Spring-AOP详解(AOP概念,原理,动态代理,静态代理)

重点:1.Spring-Framework的proxytargetclass默认值为false,所以Spring-Framework,JDK和CGLIB两个代理都使用 2.而Spring-Boot需要区分版本:对于Spring-Boot 2.xxx版本,proxytargetclass默认值也为false.所以,Spring-Boot 2.xxx版本也是JDK和CGLIB两个代理都使用,而Spring-Boot 3.xxx版本proxytargetclass默认值则为true,所以Spring-Boot 3

robin_suli的博客 1798

spring的aop的动态代理机制都有哪些_Spring学习(4):Spring AOP

Spring AOP说明AOP(Aspect Oriented Pragraming)面向切面编程,AOP采用横向抽取机制,取代了传统纵向继承体系的重复性代码(性能监视、事务管理、安全检查、缓存)。所谓的传统纵向继承体系是指当你需要实现某个功能的时候需要去继承某个类,而横向抽取机制则是通过使用动态代理机制产生一个与之同级的对象,然后在代理对象中进行功能增强。Spring AOP使用纯Java实现,...

weixin_39638304的博客 2160
上一篇: Spring学习-19:Spring的AOP:带有切点的切面
下一篇: Spring学习-21:Spring的AOP:基于AspectJ的注解开发
Yes_JiangShuai
博客等级 码龄10年 149粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值