热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从完全相同的@Configuration类习语中注入@Beans

过去,我见过人们使用以下2种习惯用法从同一@Configuration注入依赖项:@Con

过去,我见过人们使用以下2种习惯用法从同一@Configuration注入依赖项:

@Configuration
public class MyConfiguration {
@Bean
public MyBeanDependencyA myBeanDependencyA(){
return new MyBeanDependencyA();
}
@Bean . //IDIOM 1
public MyBeanDependencyB1 myBeanDependencyB1(){
return new MyBeanDependencyB1(myBeanDependencyA());
}
@Bean //IDIOM 2
public MyBeanDependencyB2 myBeanDependencyB2(MyBeanDependencyA myBeanDependencyA){
return new MyBeanDependencyB1(myBeanDependencyA);
}
}

它们之间有实际区别吗?


  • Spring是否在IDIOM 1的每次调用中处理整个实例化方法? (如果方法有任何副作用,可能不是幂等的)?

  • 在注入IDIOM 1时,Spring是否会注入全局托管实例? (与某些外部进程更改原始单例bean的状态有关)

Spring容器这么聪明吗?




  

Spring会在每次对IDIOM 1的调用中处理整个实例化方法吗?

否,这称为inter-bean dependencies,该方法在@Bean类中用@Configuration注释进行注释,将在spring IOC容器中创建Bean


  

@Bean批注用于指示方法实例化,配置和初始化要由Spring IoC容器管理的新对象。对于熟悉Spring的XML配置的人,@ Bean批注将起作用与元素具有相同的作用。您可以将@Bean批注方法与任何Spring @Component一起使用,但是,它们通常与@Configuration Bean一起使用。





  

在注入IDIOM 1时,Spring是否会注入全局托管实例?

是的,如果需要在多个位置使用spring注入相同的bean Basic concepts: @Bean and @Configuration,则这种bean间的依赖关系只能与@Bean@Configuration结合使用,这也阻止了调用同一个bean方法多次。


  

建议仅在@Configuration类中使用@Bean方法,以确保始终使用“完全”模式。这样可以防止同一@Bean方法多次被意外调用,并有助于减少在“精简”模式下运行时难以跟踪的细微错误。


,

  

Spring是否在IDIOM 1的每次调用中处理整个实例化方法? (如果方法有任何副作用,可能不是幂等的)?

默认情况下,@Configuration类在运行时被代理,因此MyBeanDependencyA将被创建一次,myBeanDependencyA()将仅被Spring调用一次,并且下次调用将被代理返回相同的实例(就您共享的示例而言)。在上下文中,此bean只会有一个实例,因为它的范围是Singleton




  

在注入IDIOM 1时,Spring是否注入全局托管实例? (与某些外部进程更改原始单例bean的状态有关)

查询到IOC容器时,它将返回Singleton bean的相同实例。由于它是Singleton,因此对该bean的所有更改(如果它是可变的)对于引用该bean的组件都是可见的。


另一方面,您不能使用Spring 5.2来禁用配置类的自动代理:

@Configuration(proxyBeanMethods = false)

这将防止代理使用其他@Bean方法调用的@Bean注释的方法的调用。


推荐阅读
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
author-avatar
港1009
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有