懒加载springboot
时间: 2025-01-07 08:50:36 浏览: 1
### 实现懒加载的方式
在Spring Boot中,尽管没有直接提供用于全局配置懒加载的选项,但是可以通过多种方式实现针对特定Bean的懒加载功能[^2]。
#### 使用`@Lazy`注解
一种简单的方法是在定义Bean时使用`@Lazy`注解。这使得该Bean只有在其被首次请求注入到其他组件中时才会实例化:
```java
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
@Lazy
public class LazyInitializedBean {
// Bean 的属性和方法...
}
```
当这个Bean第一次通过依赖注入或其他形式访问的时候才真正初始化它自己。
#### 自定义BeanFactoryPostProcessor
另一种更灵活的办法是编写自己的`BeanFactoryPostProcessor`来修改默认的行为模式,在这里可以指定哪些类型的Beans应该采用延迟加载机制:
```java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.Ordered;
import org.springframework.core.PriorityOrdered;
public class CustomLazyInitBeanFactoryPostProcessor implements ApplicationContextInitializer<ConfigurableApplicationContext>, PriorityOrdered {
private final String[] lazyInitBeanNames = {"beanName1", "beanName2"};
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
for (String beanName : lazyInitBeanNames){
if(beanFactory.containsBeanDefinition(beanName)){
((DefaultListableBeanFactory)beanFactory).getBeanDefinition(beanName).setLazyInit(true);
}
}
}
}
```
这段代码展示了如何创建一个实现了`ApplicationContextInitializer`接口并重写了`initialize()`方法的类,从而可以在应用程序上下文初始化之前改变某些beans的lazy-init状态为true。
阅读全文