这两个定义有什么区别?
public class MainClass {
//definition one
private static MainClass main = new MainClass();
//definition two
private static MainClass main2 = MainClass.getMain2();
public static void main(String[] args) {
}
private static MainClass getMain2() {
return main2;
}
}
哪个更好?
答案 0 :(得分:1)
我认为您的代码是错误的。此方法应该在其他类中。应该是
private static MainClass getMain2() {
return new MainClass();
}
这称为依赖注入。
您的代码应如下所示
public class MainClass {
//definition one
private static MainClass main = new MainClass();
//definition two
private static MainClass main2 = MainClass.getMain2();
public static void main(String[] args) {
}
//constructor injection
private static MainClass( MainClass a) {
this.main2 = a;
}
//Or in place of constructor injection you can use Setter injection
public static setMain2( MainClass a) {
this.main2 = main2;
}
@Thiago Arrais在What is dependency injection?上回答的问题很容易理解,无需具备丰富的编码/框架知识-
The best definition I've found so far is one by James Shore:
“依赖注入”是一个5美分概念的25美元术语。依赖注入意味着为对象提供实例变量。
马丁·福勒(Martin Fowler)的一篇文章可能也很有用。
依赖注入基本上是提供对象需要的对象(其依赖),而不是由它自己构造它们。这是一种非常有用的测试技术,因为它可以模拟或消除依赖关系。
可以通过多种方式将依赖项注入到对象中(例如构造函数注入或setter注入)。甚至可以使用专门的依赖项注入框架(例如Spring)来做到这一点,但是肯定不是必需的。您不需要那些框架具有依赖项注入。显式实例化和传递对象(依赖项)与通过框架进行注入一样好。