spring - 依赖注入(inject) - 在运行时决定参数

标签 spring dependency-injection guice

我很想知道以下场景是否是依赖注入(inject)的一个很好的用例。这个例子有点编造,可能不是好的 OO 设计。请耐心等待并关注与问题相关的部分:

假设我有以下类(class):

class BankAccount
{
    User user;
    Integer accountNo;

    BankAccount(User user, Integer accountNo){
        ....
    }
 }

class User
{
    String firstName, lastName;

    User(String firstName, String lastName)
    {
        ....
    }
}

假设我必须在以下场景中创建对象:
void withoutDependecyInjectionUsingNewOperator()
{
     User user = new User("Lance", "Armstrong");
     // These values are determined
     // based on form input on UI
     BankAccount account = new BankAccount(user, 1233);
}

我已经了解了支持 DI 的框架,例如 Guice 或 Spring。
如果我使用这些框架中的任何一个,我是否应该更改上述功能
使用 DI?

根据我到目前为止在教程中看到的示例,它似乎最有用
当构造函数参数可以被确定为配置而不是在以下情况下
这些值最终基于用户输入?

谢谢!

最佳答案

根据您发布的内容,这不是正确使用依赖注入(inject)。对于工厂模式来说,这是一个不错的案例。依赖注入(inject)用于通过使用接口(interface)来消除对特定类型的依赖,并且仅在运行时设置具体类型(通常使用 ninject 之类的第 3 方框架)

例如,您可以有一个 IUserFactory,BankAccount 类型使用它来获取 IUser。在运行时,可以使用具体的 UserFactory 类“注入(inject)” BankAccount 类,而不是具有编译时依赖项。然后,您可以换出 UserFactories 而不必需要 BankAccount 类。

关于spring - 依赖注入(inject) - 在运行时决定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270929/

相关文章:

java - 与默认类加载器和 PlayFramework 自定义类加载器冲突

java - Spring Boot 。如何将数组转为json

java - Hibernate @Email 列表上的注释

model-view-controller - 如何避免将依赖项注入(inject)对象以便它可以传递它们?

javascript - Node.js、Express 和依赖注入(inject)

java - 你如何使用 Guice 在 Android Activity 中注入(inject)一些接口(interface)的实现

通用工厂的 Java 通用不编译

java - Spring JPA/Hibernate 未更新到数据库以在保存时更改 @Entity 的 boolean 值

java - 将字符串错误响应转换为 Http 状态代码

dependency-injection - 在 Wildfly 中用于模块间服务注入(inject)的 OSGI 替代方案是什么?