Java如何通过依赖注入从Main类向Game类注入前后端实例
解答
完全可以,这是手动实现依赖注入的最基础场景,不需要引入额外的IoC框架就能完成,核心思路是把Game类内部自己创建前后端实例的逻辑,转移到外部调用方(也就是Main类)完成,再把创建好的实例传入Game类使用。
具体改造方式
- 改造Game类:移除run方法里直接new实例的逻辑,把前后端对象定义为类的成员变量,通过构造方法接收外部传入的依赖实例
import sample.backend.*; import sample.frontend.*; public class Game { private final GameBackendImpl gameBackend; private final GameUIImpl gameUI; // 构造器注入:接收外部传入的依赖实例 public Game(GameBackendImpl gameBackend, GameUIImpl gameUI) { this.gameBackend = gameBackend; this.gameUI = gameUI; } public void run(){ // 直接使用注入好的实例编写业务逻辑即可,不需要再自行实例化 } }
- 改造Main类:在main方法里先创建好前后端实例,再在初始化Game对象时把这两个实例作为参数传入,完成注入
public class Main { public static void main(String[] args) { // 外部统一创建依赖实例 GameBackendImpl backend = new GameBackendImpl(); GameUIImpl ui = new GameUIImpl(); // 注入依赖后获取Game实例 Game game = new Game(backend, ui); game.run(); } }
优化建议
如果后续需要做单元测试、或者要替换前后端的不同实现,建议先抽象出GameBackend、GameUI两个接口,让对应的实现类实现接口,Game类的成员变量、构造参数都使用接口类型声明,不要直接绑定具体实现类,这样代码耦合度更低,也更符合依赖倒置的设计原则。
内容的提问来源于stack exchange,提问作者Pencho Blazquez
相关产品推荐
相关产品推荐

