Spring中bean对象的存储与读取

Java中的Bean管理:创建与获取
在Java中,Bean对象用于多次复用。创建Bean涉及配置XML文件,如Spring的beans定义。ApplicationContext和BeanFactory都是管理Bean的接口,前者一次性加载所有Bean,后者惰性加载。获取Bean可以通过名称、类型或名称和类型组合,但每种方法都有其特定的限制条件。

存储

bean对象:在java中,如果一个对象被使用多次,可以称之为Bean;

1.创建Bean对象

 2.创建资源文件下的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

</beans>

 3.在资源配置文件中存Bean

 

读取

1.得到Spring对象(ApplicationContext 和 BeanFactory)

2.获取Bean

3.使用Bean

 ApplicationContext接口 和 BeanFactory接口的区别:

1)ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,并存储到spring容器中,而BeanFactory 是需要那个才去加载那个,即执行到getBean才加载,因此更加轻量,是惰性加载。

2)BeanFactory 和 ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能力,而 ApplicationContext 属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性, 还添加了对国际化⽀持、资源访问⽀持、以及事件传播等方面的支持。

 获取Bean的三种方式:

1)通过名称获取(遇到类型为null的会出错)

2)根据类型获取(如果spring中有多个类型相同的,就会出错)

    每一个存储到spring的类,无论类是否相同,spring都会创建一个内存

3)根据名称和类型获取

 

<think> 我们正在讨论Java bean对象的固化和读取。根据引用内容,我们可以看到: - 引用[1]提到了在Spring配置文件中配置sessionFactory bean,这涉及将bean定义固化在配置文件中 - 引用[2]解释了Spring中@Enable系列注解如何通过@Import动态注册bean定义 - 引用[3]则展示了一个自定义Spring Boot Starter实现动态配置线程池的例子,体现了bean的动态调整 因此,Java bean的固化读取可以有两种主要方式: 1. 传统的配置文件固化(如XML配置) 2. 基于注解和编程式的动态注册(如@Configuration和@Bean) 下面详细说明这两种方式: </think> ### Java Bean对象的固化读取方法 在Java中,Bean对象的固化(持久化)读取主要涉及以下技术方案: #### 1. **序列化反序列化(基础方法)** 通过实现`java.io.Serializable`接口实现对象固化: ```java // Bean定义(需实现Serializable) public class UserBean implements Serializable { private String name; private int age; // getters/setters省略 } // 对象固化(写入文件) try(ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("user.bean"))) { oos.writeObject(new UserBean("Alice", 30)); // 固化对象 } // 对象读取(从文件加载) try(ObjectInputStream ois = new ObjectInputStream( new FileInputStream("user.bean"))) { UserBean user = (UserBean) ois.readObject(); // 读取对象 } ``` > ⚠️ 注意:序列化版本号`serialVersionUID`需保持一致[^1] #### 2. **XML配置固化(Spring传统方式)** 在Spring配置文件中定义Bean(固化配置): ```xml <!-- applicationContext.xml --> <bean id="userBean" class="com.example.UserBean"> <property name="name" value="Bob"/> <property name="age" value="25"/> </bean> ``` 通过`ClassPathXmlApplicationContext`读取: ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserBean user = context.getBean("userBean", UserBean.class); ``` #### 3. **注解动态注册(Spring Boot方案)** 使用`@Configuration`和`@Bean`实现编程式固化: ```java @Configuration public class AppConfig { @Bean public UserBean userBean() { return new UserBean("Charlie", 28); // Bean定义固化 } } ``` 读取时通过依赖注入: ```java @Autowired private UserBean userBean; // Spring自动注入 ``` #### 4. **动态配置中心(高级方案)** 结合配置中心实现运行时动态调整(如引用[3]方案): ```java @Configuration public class DynamicConfig { @Bean @RefreshScope // 支持动态刷新 public UserBean userBean( @Value("${user.name}") String name, @Value("${user.age}") int age) { return new UserBean(name, age); } } ``` > 配置变更时通过`/actuator/refresh`端点热更新Bean属性 #### 方案对比 | 方法 | 适用场景 | 动态更新 | 复杂度 | |---------------------|----------------------------|----------|--------| | 序列化 | 简单对象存储 | ❌ | ⭐ | | XML配置 | 传统Spring应用 | 部分支持 | ⭐⭐ | | 注解配置 | Spring Boot应用 | 部分支持 | ⭐⭐ | | 配置中心+@RefreshScope | 需要实时更新的生产环境 | ✔️ | ⭐⭐⭐ | ### 最佳实践建议 1. **基础场景**:优先使用Spring Boot的`@ConfigurationProperties`绑定配置到Bean 2. **动态需求**:结合Nacos/Consul等配置中心实现热更新(参考引用[3]弹性方案) 3. **兼容考虑**:XML注解配置可混合使用,新版Spring Boot默认支持注解驱动[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值