Spring中动态注册和销毁对象(二)

1. 使用说明

        通常我们项目中想要往spring容器中注入一个bean可以在项目初始化的时候结合@Bean注解实现。但是该方法适合项目初始化时候使用,如果后续想要继续注入对象则无可奈何。本文主要描述一种在后续往spring容器注入bean的方法。

2. 实现

2.1 说明

2.1.1 注册bean

  • 定义BeanDefinition,注册类定义到factory中
  • 创建对象,注册实例到fatory中

2.1.2 销毁bean

  • 判断是否有类定义。有,则移除BeanDefinition
  • 判断是否有对象。有,则从容器中去除

2.2 代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author pp_lan
 * @date 2024/1/17
 */
@Component
public class SpringUtils {

    @Auto
Spring Boot里,成员变量Bean对象存在明显区别。成员变量是类内部定义的变量,用于存储对象的状态数据,属于类实例的一部分。而Bean对象是由Spring容器管理的对象,通过特定方式(如`@Bean`注解或XML配置)被注册Spring容器中,可在应用的其他部分被注入使用。 从作用范围看,成员变量的作用范围是定义它的类实例,不同的类实例可以有不同的成员变量值。Bean对象的作用范围由其作用域决定,Spring提供了多种作用域,如单例(singleton)、原型(prototype)等。单例作用域下,整个应用中只有一个Bean实例;原型作用域下,每次请求都会创建一个新的Bean实例[^2]。 从生命周期角度,成员变量的生命周期与类实例一致,类实例被创建时成员变量初始化,类实例被销毁时成员变量也随之消失。Bean对象的生命周期由Spring容器管理,从创建、初始化到销毁Spring容器会在不同阶段调用相应的方法,如初始化方法销毁方法。 在使用方式上,成员变量通过类的实例进行访问操作。Bean对象则通过依赖注入的方式在其他组件中使用,Spring会自动将所需的Bean对象注入到需要的地方。 从线程安全方面考虑,成员变量如果在多线程环境下被多个线程访问修改,需要开发者自己处理线程安全问题。而Spring管理的Bean对象,其线程安全性取决于Bean的作用域实现方式,例如单例Bean在多线程环境下可能需要考虑线程安全问题,而原型Bean由于每次请求都会创建新实例,一般不存在线程安全问题。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; // 定义一个Bean对象 @Component class MyBean { public void doSomething() { System.out.println("MyBean is doing something."); } } // 包含成员变量的类 @Component class MyClass { // 成员变量 private String message; // 注入的Bean对象 @Autowired private MyBean myBean; public MyClass() { this.message = "Hello, Spring Boot!"; } public void printMessage() { System.out.println(message); } public void useBean() { myBean.doSomething(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值