Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动关联和对象创建之间的区别是什么?_Java_Spring Mvc_Autowired - Fatal编程技术网

Java 自动关联和对象创建之间的区别是什么?

Java 自动关联和对象创建之间的区别是什么?,java,spring-mvc,autowired,Java,Spring Mvc,Autowired,如果我自动连接一个类并提供值,实例化一个类的对象并提供一些值,有什么区别? 比如说- @Autowired private UserService userService; userService.findUser(userName, password); 及 自动连接和发送数据、实例化对象以及将数据发送到某个服务类有什么区别 我试图在春季澄清这些概念。你的例子没有多大意义;这个User类看起来像一个普通的数据对象,没有向第二个代码段添加任何内容 “自动连接”的思想是,某些类,比如Web控制器

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

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

自动连接和发送数据、实例化对象以及将数据发送到某个服务类有什么区别


我试图在春季澄清这些概念。

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

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


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

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

另一方面,当您自己实例化该对象时,您正在指定您所关注的对象以及您想要的类的类型。这可以减少代码的不明确性,因为您知道要初始化什么类型的对象,但要更改应用程序的行为,您需要更改代码


本质上,第一个选项的耦合性不如第二个选项,后者通常是构建东西的推荐方式。

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

上面的答案很好,我想告诉你它们之间的主要区别。自动连接的目的是避免类之间的依赖关系
如果您正在使用new创建对象,则对一个类进行更改将影响所有类。

请参考您的示例。您的示例可能错误,您有两种不同的类型。能否提供更完整的示例?我不确定你的两个例子是如何联系的,第一个例子不清楚
userName
password
来自哪里,第二个例子不清楚
userService
来自哪里。
User user = new user();
userService.findUser(user.getuserName(),user.getpassword());