2015-04-06 121 views
0

对不起,本文对IoC和依赖注入有点困惑。我会给你举个例子,但我很难实现。Java IoC和Guice - 依赖注入

假设我有一类用户是这样的:

public class User { 
    private String username; 
    private String password; 

    // getter and setter 
} 

这个类,应该在其他几个控制器一起使用:

  • 的UI,其中用户可以更改其密码
  • 另一用户可以提交一些“工作”的UI,并且此控制器需要访问用户名
  • 需要用户的任务(线程或其他)

在这里,我们只有一些例子,其中需要用户,所以在第一个例子中,用户是单身人士并且应该“活”在整个应用程序中。

在应用程序启动(主)用户将被加载,但只有一个这三个控制器将被创建。另一个组件将在应用程序运行时(以及某些事件发生时)创建。

一个简单的方法可能是创建所有这三个组成以接受User对象和实施这样:

public class FirstComponent { 
    private User user; 

    public FirstComponent(User user) { 
     this.user = user; 
    } 
} 

通过这种方式,我们需要经过用户的设置来创建所有的组件,而不是当他们需要时。

一个更好的方法(我觉得...)可能是不注入用户在此需要的所有类,而不被“obbligated”创建此组件的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类?

在应用中,可能存在许多类,如用户,例如:

  • 具有预约列表的类 - >这将被共享属于许多控制器

对不起如果我发布了一个愚蠢的问题,但看在网上我发现了一些exaplain如何解决这个问题的例子。

我在看Guice,我已经开始使用它(很少),但问题没有解决。

非常感谢您的帮助!

回答

1

一个简单的方法可能是创建所有这三个组成接受的用户对象,并以这种方式实现:

public class FirstComponent { 
    private User user; 

    public FirstComponent(User user) { 
    this.user = user; 
    } 
} 

通过这种方式,我们需要创建所有组件在用户设置后,而不是在需要时。

这是不是真的。这种简单的方法就是依赖注入的全部内容。关键是要选择合适的范围内为您User对象。

基本上只要你创建一个类,你写一个new地方添加你想创建作为参数传递给构造函数的对象。一个例外是像ListArray容器。这样所有的依赖关系都消失了。

问题是,你可能会得到大量的对象,并避免你可以创建Builder类来引导对象创建。

这种方式,创建过程是从类逻辑独立的和的类将是单元测试方式更容易使用嘲笑对象。