当前位置: 首页 > 知识库问答 >
问题:

自动装配和对象创建有什么区别?

阴高刚
2023-03-14

如果我自动连接一个类并提供值,实例化一个类的对象并提供一些值,那么有什么区别?例如-

@Autowired
private UserService userService;
userService.findUser(userName, password);

而且

User user = new user();
userService.findUser(user.getuserName(),user.getpassword());

自动装配和发送数据与实例化对象和将数据发送到某些服务类有什么区别?

我试图在Spring澄清这些概念。

共有3个答案

齐财
2023-03-14

好吧,主要区别在于,如果你使用@Autow的对象也被创建,但是,它是由容器创建的,容器决定何时这样做。我想给你一个简单的例子:你有四个类1,2,3和4。其中三个(1,2,3)使用第4个。所以,如果你使用new(),很难决定在哪里创建对象(在第1类、2类或3类中,甚至在每个类中)第4类。此外,稍后您可以删除具有对象初始化的类,而其他2个类将不起作用(如果您创建了一个对象)。自动装配注释注入对象,但您不会在类中初始化对象,因此不会出现问题这就像最简单的答案。

闻人英韶
2023-03-14

你的例子没有多大意义;这个类看起来像一个普通的数据对象,没有向第二个代码段添加任何内容。

“自动装配”的想法是某些类,例如Web控制器,需要UserService才能完成其工作。当Spring自动装配UserService时,它会进入上下文并找到一个匹配的对象并将其提供给需要它的类。这在技术上与创建对象是分开的。

也就是说,最佳实践是使用构造函数注入——只需将所需的其他对象声明为构造函数参数,并使用Autowired(或)Inject(或)注释构造函数。Spring将知道如何查找所需的所有依赖项,并使用它们调用构造函数。这意味着为测试或开发提供这些对象的模拟也非常简单。

柳俊健
2023-03-14

当您使用@Autow的时,您将它留给Spring框架来查找和实例化userService。这通常通过一些配置文件或其他配置来控制,它允许您在不更改代码本身的情况下更改应用程序的行为。

另一方面,当您自己实例化对象时,您正在指定您所追求的对象以及您想要的类类型。这可能会让您的代码不那么模糊,因为您知道正在初始化什么类型的对象,但要更改应用程序的行为,您需要更改代码。

本质上,第一个选项的耦合性比第二个选项低,第二个选项通常是推荐的构建方式。

 类似资料:
  • 本文向大家介绍json和对象有什么区别?相关面试题,主要包含被问及json和对象有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 JSON 是对象,但对象不一定是 JSON。 对象是由属性和属性值组成,也就是 KEY->VALUE 对。 对象中的 value 可以是任意的数据类型,包括函数。而 JSON 中的 value 不能为函数。

  • 问题内容: 谁能举例说明Javascript对象和JSON对象之间的区别? 问题答案: Javascript 对象 是Javascript 中的数据类型-仅在Javascript中才有意义。通常,您会看到这样的Javascript 对象文字 : JSON 字符串 是一种数据交换格式,它只不过是一串以特定方式格式化的字符(为了使不同的程序相互通信)。因此,它可以存在于Javascript或其他语言中

  • 本文向大家介绍window对象和document对象有什么区别?相关面试题,主要包含被问及window对象和document对象有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 document对象是window对象的一部分 document是用来操作dom元素的 window对象当你打开浏览器时就被创建,这个浏览器的所有东西都是window对象属性

  • 问题内容: Java中的封装和抽象之间到底有什么区别?任何简短的例子也将不胜感激。 问题答案: 抽象和封装是两个很好的味道,它们在一起味道很好。 封装 可以最大程度地减少向代码用户展示的内容。该“用户”可以是您代码的其余部分,也可以是使用您发布的代码的任何人。 封装有一定的好处: 代码的用户不依赖于程序中可能更改的部分。当您更改程序时,他们不必更改代码 您可以更好地控制代码和状态在程序生命周期中的

  • 在采访中,我被要求解释抽象和封装之间的区别。我的回答是大致相同的 > 抽象允许我们以最简单的方式表示复杂的现实世界。它是识别一个对象应该具备的相关品质和行为的过程;换句话说,代表必要的特征而不代表背景细节。 封装是一个从外部真实世界隐藏对象所有内部细节的过程。“封装”这个词,就像“封装”成一个“胶囊”。它限制客户端查看实现抽象行为的内部视图。 我想通过以上的回答,面试官确信了这一点,但随后我被问到

  • 定义String对象直接使用“=”赋值和new 创建对象赋值有什么区别? 在研究String直接赋值与new String的区别之前我们需要先了解java中的字符串常量池的概念。 字符串常量池 String类是我们平常项目中使用频率非常高的一种对象类型,jvm为了提升性能和减少内存开销,避免字符的重复创建,其维护了一块特殊的内存空间,即字符串池