当前位置: 首页 > 面试题库 >

新关键字在Spring Framework中的作用

赵炯
2023-03-14
问题内容

在Spring
Framework中,似乎bean是创建用于业务逻辑的对象的首选方式。

[依赖关系注入]是一个过程,通过该过程,对象只能通过构造函数参数,工厂方法的参数或在对象实例构造或从对象实例返回后设置的属性来定义其依赖关系,即与它们一起使用的其他对象一种工厂方法。然后,容器在创建bean时注入那些依赖项。此过程从根本上讲是与之相反的,因此名称为Inversion
of Control(IoC),即bean本身通过使用类的直接构造或诸如服务定位器模式的机制来控制其依赖项的实例化或位置。

因此,根据我的简单理解,区别是这样的:

// Plain ol' Java
Foo f = new Foo();

// Using beans in Spring Framework
Foo f = FooFactory.get();

通常说来,在@Configuration类和@Bean定义之外的方法中,开发人员应仅使用bean获得对象,这是否过于简单?具体来说,在需要新鲜对象的情况下,应该注入原型bean而不是new直接使用关键字吗?

下面显示了一个我不确定是否遵循Spring约定的代码示例。

// Construct a new object that will be created in the database
RecordDto record = new RecordDto();

// Or should I be using some bean factory?
RecordDto record = RecordDtoFactory.get();

问题答案:

请阅读心爱的马丁·福勒的这篇文章。我认为,当应用程序中的某些组件依赖于其他组件来完成某些功能时,IOC概念将非常有用。IoC容器将负责管理软件组件的创建和生命周期,还将它们注入从属组件中,而不是手动获得对这些组件实例的访问权限。

例如,当某些服务需要DAO实例时,它将从容器中获取而不是创建它。

但是在DTO的情况下,它们将仅保存数据,而这并不是真正的依赖关系。因此,我认为在这种情况下使用 “新” 更好。



 类似资料:
  • 问题内容: Java 9最大的功能之一是Project Jigsaw定义的模块系统。当从JavaOne 2015 的Project Jigsaw:The Hood 中读取幻灯片时,我注意到以下源代码: 对我而言,有趣的是文件结尾,并且似乎使用了两个新关键字:和。Java 9将引入哪些其他关键字?向后兼容性(即名为的函数或变量)将如何处理? 问题答案: Java SE 9 Edition Java语

  • 本文向大家介绍C# 中static关键字的作用?相关面试题,主要包含被问及C# 中static关键字的作用?时的应答技巧和注意事项,需要的朋友参考一下 对类有意义的字段和方法使用static关键字修饰,称为静态成员,通过类名加访问操作符“.”进行访问; 对类的实例有意义的字段和方法不加static关键字,称为非静态成员或实例成员。 注: 静态字段在内存中只有一个拷贝,非静态字段则是在每个实例对象中

  • 对于可见性,Java 提供了 volatile 关键字来保证可见性和禁止指令重排。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。当一个共享变量被 volatile 修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。 从实践角度而言,volatile 的一个重要作用就是和 CAS 结合,保证了原子性,详

  • Swift 5.x 关键字 mutating 的作用 1. 在实例方法中修改属性 结构体和枚举是值类型. 默认情况下, 值类型属性不能被自身的实例方法修改. 可以选择在func关键字前加上mutating关键字来指定实例方法内可以修改属性 e.g. struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x de

  • 本文向大家介绍iOS static 关键字的作用?相关面试题,主要包含被问及iOS static 关键字的作用?时的应答技巧和注意事项,需要的朋友参考一下 (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值; (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (

  • 具体来说,我正在尝试这个代码: 但它给出了错误 无法访问静态方法main中的非静态字段 所以我把的声明改为: 它起作用了。把这个关键字放在声明之前意味着什么?它到底会对这个对象做什么和/或限制什么?