Spring Java依赖注入实现方法、优势解析及代码修正
问题解决:Spring依赖注入改造及优势说明
一、修正业务逻辑并实现依赖注入
你的代码当前输出不符合预期,核心是业务逻辑硬编码与类间强耦合导致的问题。以下是改造后的代码,同时完整实现Spring依赖注入:
1. 接口类(移除不必要的@Component)
public interface TextWriter { String writeText(); // 调整方法逻辑,直接返回"1"以匹配最终输出需求 }
2. 实现类(添加@Component交给Spring容器管理)
@Component public class YonoWriter implements TextWriter { @Override public String writeText() { return "1"; } }
3. Yono2Writer(通过构造注入获取依赖实例)
@Component // 标记为Spring组件,纳入容器管理 public class Yono2Writer { private final TextWriter textWriter; // 构造注入:Spring自动将TextWriter的实现类实例注入进来 public Yono2Writer(TextWriter textWriter) { this.textWriter = textWriter; } public String hello(String s) { // 按需求拼接1+2+s,当传入s为"3"时得到"123" return textWriter.writeText() + "2" + s; } }
4. Yono3Writer(通过构造注入获取依赖实例)
@RestController public class Yono3Writer { private final Yono2Writer yono2Writer; // 构造注入:Spring自动注入Yono2Writer的实例 public Yono3Writer(Yono2Writer yono2Writer) { this.yono2Writer = yono2Writer; } @GetMapping("/") public String hello2() { return yono2Writer.hello("3"); } }
改造后启动Spring应用,访问根路径即可得到「123」的预期输出。
二、依赖注入的核心优势
- 解耦:原代码中
Yono2Writer硬编码new YonoWriter()、Yono3Writer硬编码new Yono2Writer(),类与类强绑定。改造后每个类仅依赖抽象(接口或父类),具体实例由Spring提供,后续替换实现类(比如换一个OtherWriter实现TextWriter返回"11"),无需修改依赖类的代码。 - 易测试:单元测试时可轻松Mock依赖对象。比如测试
Yono2Writer时,不需要真实的YonoWriter,用Mock返回固定值就能验证自身逻辑是否正确。 - 统一资源管理:Spring容器负责Bean的生命周期(创建、销毁、复用),无需手动
new实例,避免重复创建对象浪费资源。 - 灵活配置:可通过
@Qualifier、配置文件等方式快速切换依赖的实现类,适配不同业务场景。
内容的提问来源于stack exchange,提问作者yokana
相关产品推荐
相关产品推荐

