寒假学习(5)
Spring框架的核心
依赖注入
在传统的编程中,类会直接创建其所依赖的对象。例如,一个 Car 类可能需要一个 Engine 对象,它会在构造函数或类中直接实例化 Engine:
public class Car {
private Engine engine;
public Car() {
engine = new Engine(); // 直接实例化依赖对象
}
public void start() {
engine.start();
}
}
这种方式的缺点是 Car 类和 Engine 类之间紧密耦合,难以进行扩展和单元测试。
而通过依赖注入,Car 类不需要自己创建 Engine 实例,而是由外部容器(如Spring)提供给它所需要的依赖。
在Spring中,依赖注入有两种常见的方式:
构造器注入(Constructor Injection)
构造器注入是通过类的构造函数来传递依赖关系。在Spring中,使用@Autowired注解或XML配置来实现。
@Component
public class Engine {
public void start() {
System.out.println("Engine starting...");
}
}
@Component
public class Car {
private Engine engine;
// 构造器注入
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
}
}
@Component注解用于标记Engine和Car为Spring容器管理的组件。
@Autowired注解标记构造器,表示Spring会自动注入Engine对象。
Spring容器会在启动时自动创建Engine和Car实例,并通过构造器将Engine注入到Car中。
Setter注入(Setter Injection)
Setter注入是通过对象的setter方法来设置依赖关系。
@Component
public class Engine {
public void start() {
System.out.println("Engine starting...");
}
}
@Component
public class Car {
private Engine engine;
// Setter方法注入
@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}
public void start() {
engine.start();
}
}
@Autowired注解放在setter方法上,Spring会自动调用该方法并传入Engine实例。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!