[英]Java configuration and dependency injection (akin to Springs IoC vs. Weld / Guice)
[英]Java IoC and Guice - Dependency injection
抱歉,我对IoC和依赖注入感到有些困惑。 我会给你一个例子,说明我的想法,但是很难实现。
假设我有一个这样的类用户:
public class User {
private String username;
private String password;
// getter and setter
}
此类应在其他几个控制器中使用:
在这里,我们仅提供了一个需要User的示例,因此,User首先是一个单例,应该在整个应用程序中“生存”。
在应用程序启动(主)时,将加载用户,但将仅创建这三个控制器之一 。 另一个组件将在应用程序运行时创建(并发生某些事件)。
一种简单的方法是创建所有这三个组件以接受User
对象并以这种方式实现:
public class FirstComponent {
private User user;
public FirstComponent(User user) {
this.user = user;
}
}
这样,我们需要在设置用户之后而不是在需要它们时创建所有组件。
可以采用一种更好的方法(我认为...)在所有需要的类中注入用户,而无需在创建User
后“强制”创建此组件:
public class FirstComponent {
@Inject
private User user;
public FirstComponent() {
// do something
}
}
public class SecondComponent {
@Inject
private User user;
public SecondComponent(int anArg ) {
// do something
}
}
我的问题是
在应用程序中,可能存在许多类,例如User,例如:
抱歉,如果我发布了一个愚蠢的问题,但是在网上查找时,我发现了一些例子,例如可以解决该问题的方法。
我一直在寻找Guice,并且已经开始使用它了(很少),但问题仍未解决。
非常感谢您的帮助!
一种简单的方法是创建所有这三个组件以接受User对象并以这种方式实现:
public class FirstComponent {
private User user;
public FirstComponent(User user) {
this.user = user;
}
}
这样,我们需要在设置用户之后而不是在需要它们时创建所有组件。
这不是真的。 这种简单的方法就是依赖注入的全部意义。 诀窍是为您的User
对象选择正确的范围。
基本上,每当您创建一个类并在某处编写new
就将要创建的对象作为参数添加到构造函数中。 像List
或Array
这样的容器是一个例外。 这样,所有的依赖关系都消失了。
问题在于,您可能最终会遇到大量的Singleton
Objects,并且要避免创建可以指导创建对象的Builder
类。
这样,创建过程便与类逻辑无关,并且类将更易于对模拟对象进行单元测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.