`

spring之InitializingBean接口的使用

阅读更多
//记录几个spring的接口以及使用
//从名字可以看出来这个接口主要用于初始化bean用。在bean被初始化后就会执行afterPropertiesSet方法。
public interface InitializingBean {

 void afterPropertiesSet() throws Exception;

}

//其实现原理如下该方法在AbstractAutowireCapableBeanFactory中
protected void invokeInitMethods(String beanName, final Object bean, RootBeanDefinition mbd)
			throws Throwable {
                //判断是否实现了InitializingBean接口
		boolean isInitializingBean = (bean instanceof InitializingBean);
		if (isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod("afterPropertiesSet"))) {
			if (logger.isDebugEnabled()) {
				logger.debug("Invoking afterPropertiesSet() on bean with name '" + beanName + "'");
			}
			if (System.getSecurityManager() != null) {
				try {
					AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
						@Override
						public Object run() throws Exception {
						//执行afterPropertiesSet
							((InitializingBean) bean).afterPropertiesSet();
							return null;
						}
					}, getAccessControlContext());
				}
				catch (PrivilegedActionException pae) {
					throw pae.getException();
				}
			}
			else {
			        //执行afterPropertiesSet
				((InitializingBean) bean).afterPropertiesSet();
			}
		}

		if (mbd != null) {
			String initMethodName = mbd.getInitMethodName();
			if (initMethodName != null && !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) &&
					!mbd.isExternallyManagedInitMethod(initMethodName)) {
				invokeCustomInitMethod(beanName, bean, mbd);
			}
		}
	}

/**
所以我们在写框架的时候如果要进行一些初始化工作就可以实现InitializingBean接口。
*/

分享到:
评论

相关推荐

    Spring中的InitializingBean接口的使用

    Spring中的InitializingBean接口的使用 在Spring框架中,InitializingBean接口是一个重要的接口,它提供了对bean的初始化方法。InitializingBean接口只有一个方法,即afterPropertiesSet方法,该方法将在bean的所有...

    Spring的InitializingBean和init-method

    本文将深入探讨Spring中的`InitializingBean`接口和`init-method`属性,这两个特性都与bean的初始化过程密切相关。 `InitializingBean`是Spring框架提供的一种回调机制,用于在bean实例化后进行额外的初始化工作。...

    测试spring中的org.springframework.beans.factory.InitializingBean

    `InitializingBean`是Spring框架早期版本中广泛使用的初始化回调接口,虽然现在推荐使用`@PostConstruct`注解,但`InitializingBean`仍然在一些旧项目中存在。理解这个接口的工作原理以及如何正确使用它,对于深入...

    Spring中与Bean相关的接口

    本篇文章将深入探讨Spring中与Bean相关的接口,以及它们如何帮助我们更好地理解和操作Bean。 首先,我们要了解`BeanFactory`接口。它是Spring中最基本的Bean容器,负责创建、配置和管理Bean。`BeanFactory`提供了一...

    Spring Bean生命周期.pdf

    在Spring 3.0之前,初始化主要通过实现InitializingBean接口的afterPropertiesSet方法或在XML配置文件中指定init-method属性来完成。从Spring 3.0开始,推荐使用Java配置类中的@Bean注解来指定初始化方法。 4. 销毁...

    Spring bean初始化及销毁你必须要掌握的回调方法.docx

    如果一个Bean实现了Spring的InitializingBean接口,那么它必须重写`afterPropertiesSet()`方法。此方法会在所有属性设置完成后被调用,通常是在依赖注入完成后。 3. **XML配置或@Bean注解指定初始化方法** 在XML...

    Spring开发jar包

    - 开发者可以通过实现InitializingBean接口或定义init-method属性来定义初始化方法,通过 DisposableBean接口或destroy-method属性来定义销毁方法。 5. **Spring的AOP代理**: - Spring通过两种类型的代理实现AOP...

    Spring源码分析.docx

    在 BeanPostProcessor 的前置处理完成后,Spring 框架会执行 InitializingBean 接口。InitializingBean 是一种特殊的接口,用于在 Bean 对象创建完成后对其进行初始化。例如,可以使用 InitializingBean 来执行 Bean...

    Spring2(源码)

    - 开发者可以通过实现InitializingBean接口的afterPropertiesSet()方法或使用@PostConstruct注解定义初始化逻辑,通过DisposableBean接口的destroy()方法或@PreDestroy注解定义销毁逻辑。 4. **IoC容器** - IoC...

    Spring官方文档之核心篇

    - **初始化回调**:如InitializingBean接口和自定义的init-method。 - **销毁回调**:如DisposableBean接口和自定义的destroy-method。 - **组合生命周期机制**:可以结合使用不同的生命周期机制来控制Bean的生命...

    Spring源码学习八:常用的扩展接口详解1

    1. **InitializingBean接口**: `InitializingBean`接口包含一个`afterPropertiesSet()`方法,它会在Bean的所有属性被设置好之后被调用,用于执行初始化任务。这与在配置文件中通过`init-method`指定的方法类似,但...

    spring源码中英文注释

    1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间解耦。DI通过容器管理组件的依赖关系,而不是由组件自身负责查找和管理。在源码中,你可以看到`ApplicationContext`如何创建bean...

    Spring三种注入方式(三)

    Spring没有内置的接口注入机制,但可以通过实现`InitializingBean`或`DisposableBean`接口来自定义初始化和销毁逻辑。例如: ```java public class UserService implements InitializingBean { private ...

    spring-spring-framework-4.3.24.RELEASE.zip

    在源码中,`org.springframework.beans.factory.config`包包含了许多关于生命周期的接口和类,如InitializingBean、DisposableBean以及BeanFactoryPostProcessor等。 6. **事件驱动模型**:Spring提供了基于...

    Spring之核心容器bean

    此外,还可以通过实现InitializingBean和DisposableBean接口,或者使用`@PostConstruct`和`@PreDestroy`注解来定义生命周期行为。 **自动装配(Autowired)** Spring还提供了自动装配功能,通过@Autowired注解,容器...

    Spring IOC之方法注入

    此外,Spring还提供了一种基于接口的方法注入,即实现`InitializingBean`和`DisposableBean`接口。这两个接口定义了`afterPropertiesSet()`和`destroy()`方法,它们的作用与`@PostConstruct`和`@PreDestroy`类似: ...

    spring-hook-test.rar

    Spring提供了若干接口,如`InitializingBean`和`DisposableBean`,供开发者在这些阶段插入自定义逻辑。此外,还可以通过`@PostConstruct`和`@PreDestroy`注解来标记初始化和销毁方法。 2. **扩展接口**: - `...

    Spring实例化Bean顺序

    5. **InitializingBean接口**:如果Bean实现了`InitializingBean`接口,Spring会在所有必需的属性设置后调用`afterPropertiesSet()`方法。这个接口的方法调用时机晚于`@PostConstruct`注解的方法,因此实例化顺序会...

    模仿实现spring经典绝对值得看

    Spring提供接口和注解来定制Bean的生命周期行为,例如`InitializingBean`和`DisposableBean`接口,以及`@PostConstruct`和`@PreDestroy`注解。反射使得Spring可以无侵入地调用这些生命周期方法。 3. **依赖注入(DI...

Global site tag (gtag.js) - Google Analytics