是否有理由更喜欢使用新关键字?例如,假设我有一个只在另一个类中调用一次的类。在这种情况下,最好使用new关键字。或者首选Autowire,为什么?
例如,假设我的代码只需要调用其他几个类中的一个,具体取决于条件。此外,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;
}
}
答案 0 :(得分:1)
如果一个类没有重依赖(很容易构造)并且你永远不需要换掉它的实现(比如测试它与客户端的交互,甚至),那么当然可以使用一个来创建对象。构造函数。
您不会将Integer或BigDecimal注入类中。你用新的创建它们。您也可以使用DTO(数据传输对象)执行相同的操作。
与在数组列表中存储状态的类相同。您通常在创建类时使用new创建列表。注入列表实例不会带来任何好处,阅读代码的人会惊讶地看到你使用DI。
但是,如果从方法返回Json字符串,则需要将对象映射器注入类中。两者都具有灵活性和便于测试。
此外,您需要注入的任何内容都需要在spring配置文件中创建,或者作为类的注释创建。您希望Spring配置文件能够反映您的应用程序结构,而不是充斥着无关的对象声明。如果你正在使用注释,你会发现很难公开像数组列表那样的东西:)。
请记住,弹簧创建的对象是您不必的,但是您不会将它用于所有内容。您将在编写更多代码时学习。
答案 1 :(得分:0)
此外,Autowired类可能有也可能没有其他类 在他们内部自动装配。
这是一个重点。如果您使用new Obj3()
,那么它将不会成为Spring托管的bean,因此您必须手动创建和设置所有obj3
的依赖项以及它的依赖性'依赖。等等。如果您想在对象图中更改几个级别的共享依赖项的实现,该怎么办?如果您使用了new
,那么您必须手动搜索代码并将new Obj3()
的所有匹配项更改为new Obj3B()
等,这样会破坏自动装配的目的。如果您要使用自动装配,最好一直使用它并避免使用new
。