为什么要了解bean的生命周期
很多朋友学习spring 会略过生命周期的章节。这样其实是浪费了很大的一笔财富。
以beanPostProcessor为例:
背景
公司有一个线上数据源加密包, 这个包是在原开源包基础上修改了源码把明文的password设置了密文, 随着时间推移这个包没人维护,配置产生了各种问题, 很多项目时间浪费在了配置这个数据源上面。 我在搭建一个新项目就遇到了这样的问题。
问题
我不想使用这个陈旧的被修改了源码的数据源,那么面临的问题是:
开源数据源包仅支持明文密码的配置, 我得需求是配置文件中的密码为密文, 在dataSource的bean加载之后动态的将配置文件密文解密为明文, 并且setPassword到DataSource。
那么问题就来了
如何在dataSource 的 bean 初始化(将配置文件中的url,password等加载到bean中)后, 在dataSource被调用前, 获取到bean的password字段 ,解密, 重新set进去?
如果了解spring生命周期的同学应该很熟悉spring的BeanPostProcessor接口, 实现了该接口的类中有个方法:
@Override public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { return bean; }
解决方案
在spring容器初始化过程中, 会在bean被初始化后统一循环调用实现BeanPostProcessor接口并配置到IOC容器的bean 的 该方法。
那么在方法体获取DataSource的password , 解密, 设置明文密码就能达到开始时候的需求了。
代码:
public class DataSourcePasswordEncryptPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { // TODO Auto-generated method stub if(bean instanceof ProxoolDataSource){ ProxoolDataSource ds = (ProxoolDataSource)bean; String password = ds.getPassword(); PBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword("xxxxxxx"); //明文密码 String encPassword = encryptor.decrypt(password); ds.setPassword(encPassword); } return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { // TODO Auto-generated method stub return bean; } }
相关推荐
了解并掌握Spring Bean的生命周期,可以帮助我们更好地设计和管理应用程序,优化Bean的创建和销毁时机,以及合理地处理Bean间的依赖关系。在实际开发中,可以利用生命周期回调方法进行一些初始化和清理工作,提高...
Spring中Bean的生命周期和作用域及实现方式 ...了解Bean的生命周期和作用域是非常重要的,因为它们决定了Bean的生命周期和可用性。同时,掌握了Bean的实现方式,可以更好地使用Spring框架来管理Bean。
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...
实例化过程是Bean生命周期的起点。 2. **依赖注入**: - 在Bean实例化后,Spring会执行依赖注入(Dependency Injection,DI),将所需的属性值注入到Bean中。这可以通过setter方法、构造函数或者字段注入实现。 3...
初始化是Bean生命周期中的一个重要环节,通常包括以下几个步骤: 1. **构造函数创建**:当Bean需要被创建时,Spring会调用其无参构造函数(或通过`@Autowired`注解依赖注入的构造函数)来实例化Bean。 - 如上文...
实现`BeanPostProcessor`接口可以让开发者在Bean生命周期的关键时刻插入自定义逻辑,比如验证、缓存管理、AOP代理等。这提供了高度的灵活性,但同时也需要谨慎处理,因为不恰当的处理可能会影响到整个应用的性能和...
Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...
总之,Spring管理的Bean生命周期包括创建、初始化、活跃使用和销毁四个主要阶段,通过各种回调方法、接口和注解,我们可以对Bean的行为进行自定义,以满足不同应用场景的需求。深入理解这些机制,有助于我们更好地...
首先,让我们了解Spring中Bean的生命周期。在Spring容器中,Bean经历以下几个阶段: 1. **初始化**:当Spring容器加载Bean定义时,它会创建Bean的实例。这通常通过无参构造函数完成。如果Bean定义中包含了工厂方法...
本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...
了解Bean的生命周期对优化应用性能和资源管理至关重要。例如,通过合理使用初始化和销毁回调,可以确保Bean在正确的时间执行特定操作,如数据库连接的关闭。另外,对于有状态的Bean,选择合适的作用域可以避免不必要...
"Spring中Bean的生命周期详解" Spring框架是当前Java EE开发中最流行的框架之一,Spring框架中Bean的生命周期是指从创建到销毁的整个过程。...只有深入了解Bean的生命周期,才能更好地使用Spring框架开发应用程序。
ingBean 和 DisposableBean 接口 当不使用注解而是通过实现接口的方式来控制 Bean 的生命周期时,可以实现 ...了解并熟练掌握 Bean 生命周期及其控制方法,对于开发高效、健壮的 Spring 应用程序至关重要。
深入了解Spring中Bean的作用域和生命周期 在 Spring 框架中,Bean 的作用域和生命周期是两个非常重要的概念,它们决定了 Bean 的实例化和生命周期。了解 Spring 中 Bean 的作用域和生命周期是非常重要的,这将有助...
下面以一个简单的Person类为例,展示Spring Bean生命周期的各个阶段: ```java public class Person implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean { // 省略属性和构造器 @...
了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean的生命周期可以分为四个主要阶段: 1. **实例化**:Spring容器在遇到一个Bean定义时,会通过反射...