寒假学习(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实例。