我从未使用过Java的依赖注入功能,因此我阅读了一些相关页面,但仍然不清楚单例和依赖注入之间的区别。让我们以一个基本示例为例:假设我正在构建一个小型Java应用程序,使用MVC或MVVM模式。我将从登录页面开始,请求用户名和密码。这两个信息可能稍后在应用程序中需要使用,因此我需要将它们存储在一个简单的POJO中,可从应用程序的任何视图中访问。那么我应该使用什么呢?单例模式?还是应该@Inject POJO的构造函数,并在需要时使用Injector(如Guice)获取它?谢谢帮助我理解 :)
简单的POJO不应该通过依赖注入来实现。因为你需要为每个请求创建一个新的实例,所以它也不应该是单例。依赖注入应该用于完成应用程序组件/服务/存储库/bean等之间的“连线”。这有助于使您的应用程序更具模块化,封装各个组件之间的关系。而且还有更多好处。单例是指需要应用程序中只有一个对象实例。这可以通过静态实例和getInstance方法(如单例模式)在编程上实现,或者在主类或上下文中创建一个实例来实现。在Spring中,除非另行配置,所有的bean都将是单例,因为上下文将只创建一个实例。当您需要互相连接您的“单例”时,依赖注入会变得非常方便。希望已经说明得足够清楚了。
我建议避免将依赖注入到POJO中。在这种情况下,我会将ViewModels注入一个提供/管理用户的单例类型服务。如果它们需要当前用户,则其注入的服务会提供当前相关的POJO实例。只要您的用户管理服务包装在接口中,因此可以在不破坏功能的情况下稍后替换,我认为这满足了IoC的要求。这是我处理类似问题的方法,但我不确定这是否是最佳方法。