IoC按名称查找共分为三类:
在Spring Framework中,实时加载和延迟加载是指在容器启动时是否立即实例化bean的不同策略。下面我们将分别介绍这两种加载方式及其应用场景。
当涉及到懒加载和延时加载时,需要明确它们实际上是不同的概念。
懒加载(Lazy Loading) 是指在需要使用某个资源或对象时才进行加载,而不是在应用程序启动时就提前加载。这意味着直到第一次访问该资源或对象之前,它都不会被加载到内存中。懒加载可以帮助减少启动时间和内存占用。
延时加载(Delayed Loading) 则是指在特定条件下推迟 [Something went wrong, please try again later.]
请先在resource
目录下新建文件:dependency-lookup-context.xml
,并配置:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
#实时加载
<bean id="user" class="org.thinging.in.spring.ioc.overview.domain.User">
<property name="id" value="1"/>
<property name="name" value="Liutx"/>
bean>
#延时加载
<bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
<property name="targetBeanName" value="user"/>
bean>
beans>
实时加载是指在Spring容器启动时就立即实例化所有的bean。具体来说,在使用ApplicationContext作为容器时,如果不显式地配置为延迟初始化,那么所有的单例bean都会在容器启动时被实例化。实时加载能够确保在应用程序运行过程中,所有需要使用的bean都已经被创建并准备就绪。
//实时加载 配置xml配置文件
BeanFactory beanFactory = new ClassPathXmlApplicationContext("META-INF/dependency-lookup-context.xml");
lookUpInReal(beanFactory);
/**
* BeanFactory按名称实时查找
* @param beanFactory bean工厂对象
*/
private static void lookUpInReal(BeanFactory beanFactory) {
//启动Spring上下文
User user = beanFactory.getBean("user", User.class);
System.out.println(user);
}
public class DependecyLookUpDemo {
public static void main(String[] args) {
//实时加载 配置xml配置文件
BeanFactory beanFactory = new ClassPathXmlApplicationContext("META-INF/dependency-lookup-context.xml");
lookUpInReal(beanFactory);
}
}
```java
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0569800e731640bdad52d19a2edc95a1~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1632&h=416&s=64674&e=png&b=2d2d2d)
## 延迟加载(Lazy Loading)
延迟加载是指在Spring容器启动时并不立即实例化所有的bean,而是在首次访问该bean时才进行实例化。这种方式可以节省资源,并且对于某些特定情况下并不总是需要使用的bean来说,也能提高启动速度。
```java
/**
* BeanFactory按名称延时查找
* @param beanFactory bean工厂对象
*/
private static void lookUpLazy(BeanFactory beanFactory) {
ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
User userLazyLoad = objectFactory.getObject();
System.out.println("延迟查找:" + userLazyLoad);
}
public class DependecyLookUpDemo {
public static void main(String[] args) {
//实时加载 配置xml配置文件
BeanFactory beanFactory = new ClassPathXmlApplicationContext("META-INF/dependency-lookup-context.xml");
lookUpLazy(beanFactory);
}
}
在实际应用中,根据具体的需求和场景来选择合适的加载方式是非常重要的。
近期发布。
关于我
你好,我是Debug.c。微信公众号:种颗代码技术树 的维护者,一个跨专业自学Java,对技术保持热爱的bug猿,同样也是在某二线城市打拼四年余的Java Coder。
在掘金、CSDN、公众号我将分享我最近学习的内容、踩过的坑以及自己对技术的理解。
如果您对我感兴趣,请联系我。
若有收获,就点个赞吧,喜欢原图请私信我。