【Spring学习19】作用域:使用代理<aop:scoped-proxy/>

【Spring源码分析】Spring Scope功能中的动态代理 - Scoped Proxy 本文探讨了Spring Scoped Proxy的应用与实现原理。通过实际代码示例,解释了@RefreshScope注解在配置中心动态更新中的作用,揭示了Spring通过动态代理实现bean重建的机制。文章详细解析了Scoped Proxy的创建与注入过程,并探讨了Scoped Proxy的生命周期管理。希望本文能给对Spring框架感兴趣的开发者带来一点启发,如有疏漏也烦请大佬们指正! 阅读详情

接上篇

请这样做

如果想把一个web作用域的Bean注入到另一个周期长的作用域的Bean中(比如单例的bean),就需要选择注入一个AOP代理来替换这个web作用域Bean。在定义时,web作用域的Bean都需要声明使用代理模式:配置中加上<aop:scoped-proxy/>元素

官方文档的例子:

<!-- 一个HTTP session作用域的Bean 作为代理暴露出去 -->
    <bean id="userPreferences" class="com.foo.UserPreferences" scope="session">
        <!--指示容器代理这个Bean -->
        <aop:scoped-proxy/>
    </bean>
    <!--一个单例Bean注入一个代理Bean -->
    <bean id="userManager" class="com.foo.UserManager">
      <!-- 实际使用的是userPreferences的代理对象 -->
        <property name="userPreferences" ref="userPreferences"/>
</bean>

为什么要这样做?

上例中,HTTP Session作用域的userPreferences bean注入给单例userManger bean。因为userManager bean是单例的,即每个容器只会实例化一个,所以它的依赖对象userPreferences bean也仅会注入一次。这样下来,userManagerbean只能操作相同的userPreferences对象,就是初始化时注入的那一个。

将一个短生命周期作用域bean注入给长生命周期作用域bean都会存在此类问题。
我们期望的是userManager对象中的userPreferences beans与session同生命周期和同作用域。

在userPreferences bean配置中加入<aop:scoped-proxy/>后,容器将创建一个代理对象,该对象拥有和UserPreferences完全相同的public接口并暴露。代理对象每次调用时会从 Session范围内获取真正的UserPreferences对象,而userManager类却不知道。

教程:Bean作用域 Bean作用域 4 singleton作用域 4 prototype作用域 5 具有原型Bean依赖的单例Bean 7 Request, Session, Application, 和 WebSocket 作用域 7 初始网络配置 7 request作用域 8 session作用域 8 application作用域 9 websocket作用域 9 作用域 Bean 作为依赖项 9 选择要创建的代理类型 11 直接注入Request/Session引用 11 自定义作用域 11 创建自定义作用域 11 使用 阅读详情

相关推荐

Spring Bean作用域与代理机制深度解析

在Java企业级开发中,Spring框架的依赖注入机制是核心基础。理解Bean作用域及其代理原理对构建稳定系统至关重要。Spring通过作用域代理(Scoped Proxy)技术解决单例Bean持有短生命周期依赖的问题,这是AOP编程思想的重要实践。典型应用场景包括请求上下文管理、多租户隔离等分布式系统常见需求。本文以RequestContext和Session作用域为例,剖析JDK动态代理与CGLIB两种实现方式的差异,并给出线程安全、循环依赖等实际问题的解决方案。掌握这些知识能有效避免微服务架构中的状态

weixin_29258297的博客 427

Spring学习笔记 —— AOP标签详解(<scoped-proxy>)

这篇文章主要介绍和分析了Spring AOP名字空间下的一个标签"scoped-proxy",scoped-proxy主要解决了单例之中引用了非单例的Bean的问题。

Mr_SeaTurtle_的博客 7593

aop:scoped-proxy

aop:scoped-proxy 此配置一般是这样使用: <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"> <aop:scoped-proxy/> </bean> <bean id="userManager" class="com.foo.UserManager"> <property name="userPreferences" ref

522

Spring当中aop:scoped-proxy 的用法

4.<aop:scoped-proxy />的用法: 当把生命周期短的bean(比如下例中的MyBean)注入到生命周期长的bean(比如下例中的SingletonBean)时,我们必须做特殊处理,比如加<aop:scoped-proxy>来修饰短生命周期的bean。为什么?其实也好理解。比如下例中的生命周期长的bean(SingletonBean)的类型是Singleton,还没有用户访问时,在最初的时刻就建立了,而且只建立一次。这时它的一个属性myBean却要急着指向另外一个se

qq_44591615的博客 1036

老服务器焕新记:在Dell R730上折腾Nvidia K80显卡的完整记录(含Anaconda环境配置)

本文详细记录了在Dell R730服务器上为Nvidia K80计算卡安装驱动、配置CUDA及Anaconda环境的完整过程。文章重点解决了老旧硬件与CentOS 7系统的兼容性问题,提供了从BIOS设置、驱动版本精准匹配到Python机器学习环境搭建的实战指南,旨在帮助读者低成本挖掘旧服务器的GPU计算潜力。

weixin_29197835的博客 502

给汽车芯片做‘体检’:手把手教你用IEC62380和SN29500估算功能安全失效率

本文详细介绍了如何使用IEC62380和SN29500标准估算汽车芯片的功能安全失效率,涵盖基础认知、方法论对比及实战计算。通过具体案例演示两种标准的应用流程,帮助工程师准确评估半导体器件的可靠性,确保符合ISO 26262标准要求。

weixin_28725553的博客 457

挖一挖Spring的 <aop:scoped-proxy/>

Spring 中对于 session bean 的配置有一点挺特殊:就是需要 。 这个原因在 Spring 的开发手册中已经详细说明了,这里仅仅是纪录一下这个东西是如何起作用的。 从头看Spring 的代码太浪费时间了,所以直接在source中搜索“ ”,找到这个类: org.springframework.aop.config.ScopedProxyBeanDefinitio...

持续改进 275

量子计算入门指南:密度算符的核心概念与应用解析

本文深入解析了量子计算中密度算符的核心概念与应用。作为描述量子系统“状态的状态”的关键数学工具,密度算符能有效处理混合态与子系统描述,是理解量子噪声、量子纠错和开放系统演化的基石。文章通过对比纯态与混合态,阐释了密度矩阵的数学定义与物理意义,并结合代码示例演示了其在实际量子计算问题中的强大威力。

day7的博客 469

Spring IoC容器:Bean作用域

Spring IoC容器:Bean作用域

听海边涛声 848

Carla-UE4Editor导入RoadRunner地图文件(保姆级教程)

以Carla官网导入RoadRunner地图的标准文档为参考,里面增添了很多细节和注意事项,遇到问题的小伙伴过来看看吧。

DSK_981029的博客 1万+

Android 15网络子系统深度解析(一):ConnectivityService与网络管理框架全解析

深入剖析Android 15核心网络服务ConnectivityService的架构设计、NetworkAgent/Factory机制、网络状态管理、以及WiFi/移动网络切换的完整流程

Cheson的专栏 1749

Spring——<aop:scoped-proxy/>理解

首先看一下Spring文档上的两个例子对比: <bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/> <bean id="userManager" class="com.foo.UserManager"> <property name="userPrefer...

weixin_30340775的博客 222

【ComfyUI】FluxKontext 身形调优与体态增强

AI身形调优与体态增强解决方案 该工作流通过Flux系列模型实现人物体态的智能化增强,主要特点包括: 采用UNet主体模型+双文本编码器+身形增强LoRA的架构组合 通过ReferenceLatent保持原始姿态的同时强化胸腰臀比例 完整工作流包含图像加载、文本编码、潜空间映射等8个核心节点 支持自动化的前后效果对比展示 应用优势: 保持人物自然姿态的前提下实现局部强化 支持通过Prompt精确控制增强方向 适用于摄影后期、角色美化等创作场景 输出效果稳定且风格统一 使用方

Mr数据杨 1292

Spring bean的作用域

Spring bean的作用域 在默认情况下,应用上下文中的bean都是单例的形式创建的。 也就是不管给定的一个bean注入其他bean多少次,每次注入的都是同一个实例。 在大多数情况下,单例 bean是很理想的,可以反复重用。但是有时候我们所需要的bean是易变的,他会存储一些属于自己的状态,如果使用单例模式,每次操作同一个bean,会对bean造成污染,可能会出现预料不到的问题。 在Spring中定义了多种作用域,可以基于这些作用域创建 bean。 单例(Singleton):在整个应用中,只创

the shy 342

微信小程序 - 解决微信支付报错 requestPayment:fail no permission 原因分析及排查处理(支付失败出错,无法唤起支付弹框面板,微信支付API报错请求付款:失败无权限)

微信小程序,微信支付,支付报错,errMsg: "requestPayment:fail no permission",支付失败,支付权限没问题,微信小程序支付报错,检查了appid正确依旧不行,微信小程序支付异常,苹果ios手机,安卓手机,开发者工具模拟器,最新解决教程,小程序wx.requestPayment报错/无响应,小程序支付 requestPaym,微信小程序认证,真机运行,小程序微信支付提示错误,微信小程序里使用微信支付错误提示,微信小程序支付异常,微信支付弹框拉不起来,小程序支付api,都检

🏆 前端领域优质创作者 1万+

rk3588上适配wifi模组aic8800

记录一下在rk3588上调试aic8800,调试分为Debian11以及Android12两个平台,这里主要是讲过程以及修改的过程,以补丁的形式来提供解决方法。在Debian11下主要通过配置设备树、编译驱动并自动加载固件完成调试,详细介绍了设备树修改、驱动编译脚本调整和驱动加载流程。

m0_60805802的博客 1002

Spring中的aop:scoped-proxy

Spring中的aop:scoped-proxy         首先看一下Spring文档上的两个例子对比:  bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/> bean id="userManager" class="com.foo.UserManager">

lioncode的专栏 5408

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

解决Spring单例注入非单例Bean的终极方案:scoped-proxy属性配置指南

在Spring Framework开发中,你是否遇到过这样的困惑:当尝试将一个会话作用域(Session-scoped)的Bean注入到单例(Singleton)Bean中时,系统报出作用域不匹配的错误?或者注入后发现非单例Bean的状态在不同用户间混乱共享?这些问题的根源在于Spring的作用域机制与依赖注入(Dependency Injection, DI)之间的天然矛盾。本文将通过实战案例和...

gitblog_00655的博客 426

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

spring学习2-Scoped beans as dependencies

Scoped beans as dependencies The Spring IoC container manages not only the instantiation of your objects (beans), but also the wiring up of collaborators (or dependencies). If you want to inj

taotoxht的专栏 886

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

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

上一篇: 【Spring学习18】bean作用域:Web作用域及配置
下一篇: 【Spring学习20】bean作用域:理解Bean生命周期
唐大麦
博客等级 码龄19年 3233粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值