工厂模式:Spring 使用工厂模式创建并管理对象,将对象的创建过程与业务逻辑分离,降低了系统的耦合性。
public interface MyFactory {
MyBean createBean();
}
public class MyBeanFactory implements MyFactory {
public MyBean createBean() {
return new MyBean();
}
}
在上述代码中,MyBeanFactory 是一个工厂类,实现了 MyFactory 接口的 createBean 方法。通过工厂方法,Spring 容器可以将创建 MyBean 对象的过程与业务逻辑分离。
在 Spring 中,工厂模式主要应用在 Bean 工厂中。Spring 的 Bean 工厂负责创建和管理 Bean 对象,是 Spring 框架的核心组件。Spring 提供了多种类型的 Bean 工厂,如 XMLBeanFactory、ApplicationContext 等,每种 Bean 工厂都有其特定的用途。
下面是一个使用工厂模式的示例代码:
public interface Car {
void drive();
}
public class Audi implements Car {
@Override
public void drive() {
System.out.println("Driving Audi...");
}
}
public class BMW implements Car {
@Override
public void drive() {
System.out.println("Driving BMW...");
}
}
public interface CarFactory {
Car createCar();
}
public class AudiFactory implements CarFactory {
@Override
public Car createCar() {
return new Audi();
}
}
public class BMWFactory implements CarFactory {
@Override
public Car createCar() {
return new BMW();
}
}
public static void main(String[] args) {
CarFactory factory = new AudiFactory();
Car car = factory.createCar();
car.drive();
}
在上面的代码中,CarFactory 是一个工厂接口,它定义了一个 createCar 方法用于创建 Car 对象。AudiFactory 和 BMWFactory 分别实现了 CarFactory 接口,并分别返回了 Audi 和 BMW 对象。在 main 方法中,我们从 AudiFactory 中获取了一个 Audi 对象,并调用了其 drive 方法来驾驶汽车。
在 Spring 中,Bean 工厂主要应用了工厂方法模式。Spring 的 Bean 工厂负责创建和管理 Bean 对象,其中 Bean 的创建过程是通过工厂方法实现的。在 Spring 中,Bean 工厂的实现类都实现了 FactoryBean 接口,该接口定义了一个 getObject 方法用于创建 Bean 对象。
下面是一个使用工厂方法模式的示例代码:
@Configuration
public class AppConfig {
@Bean
public Car audi() {
return new Audi();
}
@Bean
public Car bmw() {
return new BMW();
}
}
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = context.getBean("audi", Car.class);
car.drive();
}
在上面的代码中,我们使用了 JavaConfig 来配置 Bean 工厂,通过 @Bean 注解来定义 Bean 的创建方法。在 main 方法中,我们从容器中获取了一个 id 为 “audi” 的 Bean,并调用了其 drive 方法来驾驶汽车。在 Spring 中,容器会在需要时自动调用工厂方法来创建 Bean 对象。通过使用工厂方法模式,Spring 可以将 Bean 的创建过程与应用程序解耦,使得应用程序更加灵活和可维护。