@Autowired和@Scope(BeanDefination.SCOPE_PROTOTYPE)区别

记一次接入websocket过程中@ServerEndpoint和@Scope(“prototype“)、@Autowire、@Postconstruct一起使用不生效的原因分析 阅读详情

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象,具体可参见文章:http://blog.youkuaiyun.com/gst6062825/article/details/8765157 

 

但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。

 

举例说明:

下面的这个类被@Scope(BeanDefinition.SCOPE_PROTOTYPE),


 
  1. @Component
  2. @Scope(BeanDefinition.SCOPE_PROTOTYPE)
  3. public class LoadData extends Thread {
  4. ...}

在MyMultiThread.java中需要多次使用上面的LoadData.java对象,每次都需要重新创建新的对象


 
  1. @Component
  2. public class MyMultiThread{
  3. .....
  4. for (多次) {
  5.          LoadData  loadData  =XXX.getApplicationContext().getBean( LoadData .class);
  6.   loadData  .start();
  7.     }
  8. }

通过上面的方式,使用getApplicationContext().getBean()能保证每次拿到的都是新创建的LoadData对象,而如果是在MyMultiThread中通过@Autowired去依赖注入,就不能(不会)每次都创建新的LoadData对象,除非是创建了多个

MyMultiThread对象,而这并不是我们希望做的。

 

总结:

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,推荐使用getApplicationContext().getBean()去获取对象;

当类没有被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,可以使用@Autowired按类型自动注入,减少编码;

 

 

 


Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

Python跨年烟花(完整代码) Python语言实现跨年烟花动画的完整代码。 阅读详情

相关推荐

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

@Scope(BeanDefination.SCOPE_PROTOTYPE)

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象 但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。 举例说明: @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE

Emine 1742

C++语言程序设计教程第4版杨进才沈显君课后习题答案解析

为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。

weixin_58833001的博客 1332

Spring之作用域

1111111111

u013401975的博客 318

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6217

【原理图PCB专题】Cadence 17.4版本原理图及PCB 模块复用

在我们设计复杂板卡的时候,往往会遇到一部分电路被反复使用的情况。Cadence允许设计者一开始就将复用模块设计好,以后只要直接调用复用模块就可以直接用以设计更复杂的电路板了。这对于大规模集成设计无疑是非常好的选择,它不仅让设计者不必花费时间在相同模块反复设计上,更有利于电路的模块化设计。

一点硬件 2016

【Spring学习笔记-6】关于@Autowired与@Scope(BeanDefination.SCOPE_PROTOTYPE)

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象,具体可参见文章:http://blog.csdn.net/gst6062825/article/details/8765157 但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此...

weixin_34252090的博客 360

半导体设备系列(2) 半导体设备与工厂控制仿真器Demo编写

基于C/S架构用C++编写半导体设备仿真器与工厂控制仿真器

追赶时代的博客 610

@Scope(“prototype“)的正确用法——解决Bean的多例问题

1. 问题,Spring管理的某个Bean需要使用多例   在使用了Spring的web工程中,除非特殊情况,我们都会选择使用Spring的IOC功能来管理Bean,而不是用到时去new一个。Spring管理的Bean默认是单例的(即Spring创建好Bean,需要时就拿来用,而不是每次用到时都去new,又快性能又好),但有时候单例并不满足要求(比如Bean中不全是方法,有成员,使用单例会有线程安全问题,可以搜索线程安全与线程不安全的相关文章),你上网可以很容易找到解决办法,即使用@Scope("prot

宇智波小强的博客 3239

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4593

4、分布式发电系统中用于改善电能质量的有源、无源和混合滤波器

本文探讨了分布式发电系统中,尤其是光伏(PV)系统运行过程中引入的电能质量问题,并分析了有源滤波器、无源滤波器及混合滤波器在改善电能质量方面的应用。文章详细介绍了光伏系统的建模、最大功率点跟踪(MPPT)技术,以及谐波、电压波动等技术问题,同时对各类滤波器的拓扑结构和控制方法进行了系统性总结。通过仿真实例比较了不同滤波器在减少谐波方面的效果,为实际工程应用提供了参考依据。

transformer2023的博客 89

Spring容器中scope为prototype类型Bean的回收机制

通过 AutowireCapableBeanFactory 方法 autowireBean 可以将对象装配成 Spring 管理的标准 Bean 对象,主要是用于来填充有注解的属性,这样才可以使用 Spring 的 DI 特性。通过代码 new 出来的对象使用 AutowireCapableBeanFactory 方法 autowireBean 填充属性成为标准 Spring Bean 后不用担心内存溢出的问题,本质上和 Spring prototype Bean 的回收机制一样,使用完就有可能被

聚焦AI技术前沿,深度解析大模型原理与多场景应用,探索最新突破与落地实践,助力行业洞悉趋势,驱动智能转型,赋能千行百业。 1062

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2885

spring,springboot中依赖注入(@Autowire)多例模式不生效的问题

spring,springboot中依赖注入(@Autowire)多例模式不生效的问题,对于mvc应用,spring虽然提供了bean的多例,但我们需要实现控制层每访问一次service层都获取一个实例,而不是同一个实例。但实际上,在启动服务后,使用@Autowire只注入了一个实例,

weixin_45885574的博客 1646

精雕软件(JDpaint) 5.5 绿色版

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java中的注解解析@Component、@ComponentScan、@Scope、@Autowired、@Bean、@ContextConfiguration、@RunWith等

Java中的注解解析@Component、@ComponentScan、@Scope、@Autowired、@Bean、@ContextConfiguration、@RunWith等

jjw_zyfx的博客 7836

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

@Scope 注解失效了?咋回事

这个用法也很简单,通过配置就可以设置一个 Bean 是否为单例模式。

江南一点雨的专栏 375

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

@Scope(BeanDefination.SCOPE_PROTOTYPE)在多线程环境下不能使用@Autowired或者@Resource注入

当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象,具体可参见文章:http://blog.csdn.net/gst6062825/article/details/8765157 但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此...

Laputa_Spring 1580

Spring framework不同Scope的Bean注入时使用代理类的理解

最近没事在看Spring framework的参考文档,对部分有疑问的地方写些简单的demo测试一下。 以下是一个例子测试使用@Bean注解配置不同Scope的Bean注入时的效果是否与XML配置时一致。 1.首先写一个Bean的配置类,在singleton的MyService中注入prototype的MyMode类。这里使用接口为了能自由选择JDK动态代理或CGLIB Mode接口

ttjxtjx的专栏 5341

Spring常见的坑

Spring Bean的默认名称生成策略导致的空指针 源码分析:public static String decapitalize(String name) { if (name == null || name.length() == 0) { return name; } //如果类名长度大于1,且第一个和第二个都是大写,会自动返回原类名(CUstomer ==>CUstomer) if (name.length() > 1 && C...

qq_44447372的博客 390

@Resource注解和@Autowired的区别以及讲解@Scope

1.不同的包下 @Resource:在javax的包下 是Java规范的注解 作用:按照名称进行注入 @Autowired:在Spring包下定义的(常用) 作用:按照类型进行注入 例如我们这里有个Service实现类 @Service("myUserService") //给bean一个id public class UserServiceImpl implene...

心之所向博客 1312

Autowired不生效?有可能是Scope在搞怪!

由于加载顺序问题,若当前类的bean属性Scope没有设置为Prototype时(默认情况singleton),因为spring加载当前类时,你所需要自动装配的对象尚未初始化,导致Autowired失败,只装载了一个空对象。 ...

记录工作生活中的学习笔记和心得体会 671

4.Bean的Scope作用域用法

基本的作用域 在面向对象程序设计中一般指对象或变量之间的可见范围。而在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围。Spring提供“singleton”和“prototype”两种基本作用域,另外提供“request”、“session”、“global"、”session”三种web作用域;Spring还允许用户定制自己的作用域。 一、singleton:...

持之以恒! 532

Spring 中的BeanDefinition及其实现和BeanDefinitionReader

什么是BeanDefinition?在回答这个问题之前,先想一下我们通常是如何去定义一个Bean?1、通过xml文件配置Bean,<bean />2、通过配置类配置Bean,@Bean3、通过注解自动扫描成Bean,@Component(@Service,@Controller等)其实上面的三种我们通常定义Bean的方式,最终也都会被解析成BeanDefinition对象。再由BeanFactory根据BeanDefinition生成对应的Bean。

wc_150xxxxxx26的博客 1545

Spring揭秘:BeanDefinition接口应用场景及实现原理!

BeanDefinition接口灵活性高,能够描述Bean的全方位信息,使得Spring容器可以智能地进行依赖注入和生命周期管理。同时,它支持多种配置方式,简化了Bean的声明和配置过程,提高了开发效率和可维护性。

科技互联网领域深度探索者,乐于分享与写作。 768

Spring注解:@scope设置组件作用域

Spring注解:@scope设置组件作用域

weixin_42113716的博客 348

Spring_@Scope("prototype")

https://www.jianshu.com/p/ce9415465ee4

zhizhuodewo6的博客 1844
上一篇: Java中字符串split() 的使用方法.没你想的那么简单
下一篇: nginx教程(二)--nginx安装教程
Mr_baci
博客等级 码龄9年 1万+粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值