//记录几个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接口是一个重要的接口,它提供了对bean的初始化方法。InitializingBean接口只有一个方法,即afterPropertiesSet方法,该方法将在bean的所有...
本文将深入探讨Spring中的`InitializingBean`接口和`init-method`属性,这两个特性都与bean的初始化过程密切相关。 `InitializingBean`是Spring框架提供的一种回调机制,用于在bean实例化后进行额外的初始化工作。...
`InitializingBean`是Spring框架早期版本中广泛使用的初始化回调接口,虽然现在推荐使用`@PostConstruct`注解,但`InitializingBean`仍然在一些旧项目中存在。理解这个接口的工作原理以及如何正确使用它,对于深入...
本篇文章将深入探讨Spring中与Bean相关的接口,以及它们如何帮助我们更好地理解和操作Bean。 首先,我们要了解`BeanFactory`接口。它是Spring中最基本的Bean容器,负责创建、配置和管理Bean。`BeanFactory`提供了一...
在Spring 3.0之前,初始化主要通过实现InitializingBean接口的afterPropertiesSet方法或在XML配置文件中指定init-method属性来完成。从Spring 3.0开始,推荐使用Java配置类中的@Bean注解来指定初始化方法。 4. 销毁...
如果一个Bean实现了Spring的InitializingBean接口,那么它必须重写`afterPropertiesSet()`方法。此方法会在所有属性设置完成后被调用,通常是在依赖注入完成后。 3. **XML配置或@Bean注解指定初始化方法** 在XML...
- 开发者可以通过实现InitializingBean接口或定义init-method属性来定义初始化方法,通过 DisposableBean接口或destroy-method属性来定义销毁方法。 5. **Spring的AOP代理**: - Spring通过两种类型的代理实现AOP...
在 BeanPostProcessor 的前置处理完成后,Spring 框架会执行 InitializingBean 接口。InitializingBean 是一种特殊的接口,用于在 Bean 对象创建完成后对其进行初始化。例如,可以使用 InitializingBean 来执行 Bean...
- 开发者可以通过实现InitializingBean接口的afterPropertiesSet()方法或使用@PostConstruct注解定义初始化逻辑,通过DisposableBean接口的destroy()方法或@PreDestroy注解定义销毁逻辑。 4. **IoC容器** - IoC...
- **初始化回调**:如InitializingBean接口和自定义的init-method。 - **销毁回调**:如DisposableBean接口和自定义的destroy-method。 - **组合生命周期机制**:可以结合使用不同的生命周期机制来控制Bean的生命...
1. **InitializingBean接口**: `InitializingBean`接口包含一个`afterPropertiesSet()`方法,它会在Bean的所有属性被设置好之后被调用,用于执行初始化任务。这与在配置文件中通过`init-method`指定的方法类似,但...
1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间解耦。DI通过容器管理组件的依赖关系,而不是由组件自身负责查找和管理。在源码中,你可以看到`ApplicationContext`如何创建bean...
Spring没有内置的接口注入机制,但可以通过实现`InitializingBean`或`DisposableBean`接口来自定义初始化和销毁逻辑。例如: ```java public class UserService implements InitializingBean { private ...
在源码中,`org.springframework.beans.factory.config`包包含了许多关于生命周期的接口和类,如InitializingBean、DisposableBean以及BeanFactoryPostProcessor等。 6. **事件驱动模型**:Spring提供了基于...
此外,还可以通过实现InitializingBean和DisposableBean接口,或者使用`@PostConstruct`和`@PreDestroy`注解来定义生命周期行为。 **自动装配(Autowired)** Spring还提供了自动装配功能,通过@Autowired注解,容器...
此外,Spring还提供了一种基于接口的方法注入,即实现`InitializingBean`和`DisposableBean`接口。这两个接口定义了`afterPropertiesSet()`和`destroy()`方法,它们的作用与`@PostConstruct`和`@PreDestroy`类似: ...
Spring提供了若干接口,如`InitializingBean`和`DisposableBean`,供开发者在这些阶段插入自定义逻辑。此外,还可以通过`@PostConstruct`和`@PreDestroy`注解来标记初始化和销毁方法。 2. **扩展接口**: - `...
- **初始化**:Spring支持通过`init-method`属性指定初始化方法,也可以通过实现`InitializingBean`接口并覆盖`afterPropertiesSet()`方法来实现。这两种方式都可以确保在对象创建完成后立即执行特定的操作。 - **...
5. **InitializingBean接口**:如果Bean实现了`InitializingBean`接口,Spring会在所有必需的属性设置后调用`afterPropertiesSet()`方法。这个接口的方法调用时机晚于`@PostConstruct`注解的方法,因此实例化顺序会...