Spring的bean的生命周期的核心代码实现的理解,及Spring使用的工厂模式

Spring框架的bean生命周期是由容器管理的,主要包括以下几个阶段:实例化、属性赋值、初始化和销毁。

1、实例化阶段:在这个阶段,Spring容器会根据配置文件中的信息,通过反射机制创建bean的实例。具体实现代码如下:

BeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerBeanDefinition(beanName, definition);
BeanDefinition definition = new GenericBeanDefinition();
definition.setBeanClassName(className);
Object beanInstance = beanFactory.getBean(beanName);

2、属性赋值阶段:在这个阶段,Spring容器会根据配置文件中的信息,将属性值注入到bean实例中。具体实现代码如下:

BeanDefinition definition = beanFactory.getBeanDefinition(beanName);
PropertyValues propertyValues = definition.getPropertyValues();
for (PropertyValue propertyValue : propertyValues.getPropertyValues()) {
    String propertyName = propertyValue.getName();
    Object propertyValue = propertyValue.getValue();
    // 使用反射给bean实例设置属性值
    BeanUtils.setProperty(beanInstance, propertyName, propertyValue);
}

3、初始化阶段:在这个阶段,Spring容器会调用bean实例的初始化方法。具体实现代码如下:

// 判断是否实现了InitializingBean接口
if (beanInstance instanceof InitializingBean) {
    ((InitializingBean) beanInstance).afterPropertiesSet();
}
// 判断是否配置了init-method属性
String initMethodName = definition.getInitMethodName();
if (StringUtils.hasLength(initMethodName)) {
    Method initMethod = ClassUtils.getMethod(beanClass, initMethodName);
    ReflectionUtils.invokeMethod(initMethod, beanInstance);
}

4、销毁阶段:在这个阶段,Spring容器会调用bean实例的销毁方法。具体实现代码如下:

// 判断是否实现了DisposableBean接口
if (beanInstance instanceof DisposableBean) {
    ((DisposableBean) beanInstance).destroy();
}
// 判断是否配置了destroy-method属性
String destroyMethodName = definition.getDestroyMethodName();
if (StringUtils.hasLength(destroyMethodName)) {
    Method destroyMethod = ClassUtils.getMethod(beanClass, destroyMethodName);
    ReflectionUtils.invokeMethod(destroyMethod, beanInstance);
}

在整个过程中,Spring容器通过反射机制创建、初始化和销毁bean实例,同时根据配置文件将属性值注入到bean实例中。

Spring框架使用了以下几种工厂模式:

1、工厂方法模式(Factory Method Pattern):Spring中最常用的工厂模式就是工厂方法模式,它将对象的创建委托给子类来实现,从而将对象的实例化与使用代码解耦。在Spring中,BeanFactory就是一个典型的工厂方法模式的实现,它是通过xml配置文件或注解来定义bean的创建和管理,并且可以根据需要创建不同的BeanFactory实现类。例如:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean("myBean", MyBean.class);

2、抽象工厂模式(Abstract Factory Pattern):抽象工厂模式是一种创建型设计模式,它提供了一个接口来创建一系列相关或相互依赖的对象,而无需指定具体的类。在Spring中,BeanFactory接口就是抽象工厂模式的实现,它定义了创建和管理bean的方法,并且可以通过不同的实现类提供不同的创建逻辑。例如:

ConfigurableListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerSingleton("myBean", new MyBean());
MyBean myBean = beanFactory.getBean("myBean", MyBean.class);

3、单例模式(Singleton Pattern):单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在Spring中,单例模式被广泛应用于bean的创建和管理,通过配置文件或注解可以将一个类定义为单例,Spring容器会负责管理该单例的生命周期。例如:

@Component
@Scope("singleton")
public class MySingletonBean {
    // ...
}
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值