一、BeanFactory
IOC思想是基于IOC容器完成的,IOC容器的底层就是对象工厂,其核心接口为BeanFactory,BeanFactory是一个工厂类,负责生产和管理各种各样的bean,也是Spring内部的使用接口,不提供给开发人员使用,它的主要职责就是生产bean以及建立各个bean之间的关系,它在加载配置文件的时候不会创建对象,在获取(创建)对象的时候才会创建对象,BeanFactory只是一个接口,并不是IOC的具体实现,Spring给出了很多种实现,如下:
二、FactoryBean
2.1、概述
FactoryBean是一个接口,也是一个bean,但它并不是一个简单的bean,而是一个能够生产或者修饰对象生成的工厂bean,它最大的作用是能让我们自定义bean的创建过程。
2.2、核心方法
2.3、FactoryBean创建对象案例
2.3.1、Car.java
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/24 17:01
* @Description:
*/
@Component
@Data
public class Car implements Serializable, FactoryBean<Car> {
private String name;
private String description;
public Car() {
System.out.println("Car的无参构造执行了...");
}
public Car(String name, String description) {
this.name = name;
this.description = description;
System.out.println("Car的有参构造执行了...");
}
@Override
public Car getObject() throws Exception {
Tank tank = new Tank("东风0001","加满油能跑1000公里","中国");
return tank;
}
@Override
public Class<?> getObjectType() {
return Tank.class;
}
}
2.3.2、Tank.java
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/24 17:03
* @Description:
*/
@Component
@ToString(callSuper = true)
public class Tank extends Car {
/**
* 产地
*/
private String producer;
public Tank() {
System.out.println("Tank的无参构造执行了...");
}
public Tank(String name, String description, String producer) {
super(name, description);
this.producer = producer;
System.out.println("Tank的有参构造执行了...");
}
public String getProducer() {
return producer;
}
public void setProducer(String producer) {
this.producer = producer;
}
}
2.3.3、MySpringConfig.java
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/23 11:41
* @Description:
*/
@Configuration
@ComponentScan(basePackages = "org.star")
public class MySpringConfig {
}
2.3.4、测试
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/11/23 11:24
* @Description:
*/
public class Spring5x03MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MySpringConfig.class);
Tank tank = context.getBean("car", Tank.class);
System.out.println("tank = " + tank);
}
}