【发布时间】:2015-04-06 09:59:04
【问题描述】:
很抱歉这篇文章,但我对 IoC 和依赖注入有点困惑。我会给你一个我想到的例子,但很难实现。
假设我有一个这样的类用户:
public class User {
private String username;
private String password;
// getter and setter
}
这个类,应该用在其他几个控制器中:
- 用户可以在其中更改密码的 UI
- 用户可以提交一些“工作”的另一个 UI,此控制器需要访问用户名
- 需要用户的任务(线程或其他东西)
这里我们只有一些需要 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
}
}
我的问题是
- 这可能是在大型应用程序中开发代码的一个很好的解决方案,这不仅是一个主类,还有几个其他 3/4 类?
- 如何做到这一点,并避免 A 类依赖于 B 类?
在一个应用程序中,可以存在很多类如User,例如:
- 具有约会列表的类 -> 这将被多个控制器共享
对不起,如果我发布了一个愚蠢的问题,但是在网上我没有找到一些解释如何解决这个问题的例子。
我正在寻找 Guice,我已经开始使用它一点(很少)但问题没有解决。
非常感谢您的帮助!
【问题讨论】:
标签: java dependency-injection inversion-of-control