gpt4 book ai didi

java - 是否存在 'new' 优先于 Spring Autowire 的情况

转载 作者:行者123 更新时间:2023-12-01 09:35:52 25 4
gpt4 key购买 nike

有什么理由更喜欢使用 new 关键字?例如,假设我有一个类,它只会在另一个类中调用一次。在这种情况下,最好使用 new 关键字。或者 Autowire 会更受青睐,为什么?

例如,假设我的代码只需要调用其他几个类中的一个,具体取决于条件。此外,Autowired 类中可能有也可能没有其他 Autowired 类。

class MyClass {

@Autowire
Obj1 obj1;

@Autowire
Obj2 obj2;

@Autowire
Obj3 obj3;

public ResponseObj myMethod() {
ResponseObj responseObj;

if (some condition) {
responseObj = obj1.someMethod(); //any reason to use 'new' here instead?
} else if (some other condition) {
responseObj = obj2.someOtherMethod();
} else
responseObj = obj3.anotherMethod();
}

return responseObj;

}

}

最佳答案

如果一个类没有很重的依赖性(很容易构造)并且您永远不需要交换它的实现(甚至像测试它与客户端的交互),那么当然可以使用构造函数。

您不会将 Integer 或 BigDecimal 注入(inject)到类中。你可以用 new 创建它们。您也可以对 DTO(数据传输对象)执行相同的操作。

同样处理在数组列表中存储状态的类。您通常会在创建类时使用 new 创建列表。注入(inject)列表实例不会提供任何优势,阅读您代码的人会惊讶地发现您使用 DI。

但是,如果您从方法返回 Json 字符串,则需要将对象映射器注入(inject)到类中。既是为了灵 active ,也是为了便于测试。

此外,您需要注入(inject)的任何内容都需要在 spring 配置文件中创建或作为类的注释。您希望您的 spring 配置文件能够反射(reflect)您的应用程序结构,而不是充斥着无关的对象声明。如果您使用注释,您会发现很难公开诸如数组列表之类的内容:)。

请记住,spring 创建了对象,因此您不必这样做,但您不必将其用于所有用途。当您编写更多代码时,您就会学到东西。

关于java - 是否存在 'new' 优先于 Spring Autowire 的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com