spring bean什么时候实例化

fiy 其他 31

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring中的bean在什么时候实例化?

    在Spring中,bean的实例化时机是由Spring容器来控制的。Spring容器在启动时会读取配置文件或注解,根据配置信息创建bean的定义,并将其存储在容器中。当需要使用该bean时,容器会根据定义来实例化该bean。

    下面具体介绍几种常见的bean实例化时机:

    1. 单例模式下的实例化:对于单例的bean,默认在容器启动时就进行实例化。这意味着当容器启动时,所有的单例bean都会被实例化并放入容器中。

    2. 延迟加载:可以通过设置bean的lazy-init属性为true,使得bean在首次使用时才进行实例化。这样可以节省内存空间,提高性能。

    3. 原型模式下的实例化:对于原型的bean,默认在每次请求时都会创建一个新的实例。每次调用getBean()方法时,都会返回一个新的实例。

    4. BeanFactoryPostProcessor和BeanPostProcessor:Spring提供了BeanFactoryPostProcessor和BeanPostProcessor接口,可以在bean实例化之前或之后对bean进行额外的处理。这些处理阶段可以用来修改bean的定义,或者在bean实例化之后对其进行初始化操作。

    总结起来,Spring中的bean在容器启动时进行实例化,默认情况下是单例模式,并且可以通过lazy-init属性设置延迟加载。此外,通过BeanFactoryPostProcessor和BeanPostProcessor接口可以对bean进行额外的处理。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring的Bean实例化是在容器启动时进行的。当Spring容器启动时,它会读取配置文件中的Bean定义并实例化这些Bean,以便在应用程序运行时使用。在Spring中,Bean的实例化有两种方式:延迟实例化和预实例化。

    1. 延迟实例化:延迟实例化是指在需要使用Bean时才进行实例化。当容器启动时,它只会读取所有的Bean定义,但不会立即创建Bean的实例。只有当第一次使用Bean时,容器才会创建该Bean的实例。这种方式可以减少启动时的开销,特别是对于一些比较复杂的Bean来说。

    2. 预实例化:预实例化是指在容器启动时就创建所有的Bean实例。当容器启动时,它会根据配置文件中的Bean定义立即创建所有的Bean实例。这种方式可以保证在应用程序运行时所有的Bean都已经创建好,减少了第一次使用Bean时的延迟。

    在Spring中,默认情况下,Bean的实例化是延迟实例化的。这意味着只有在需要使用Bean时,容器才会创建该Bean的实例。但可以通过设置lazy-init属性为false,将Bean的实例化改为预实例化。例如:

    <bean id="myBean" class="com.example.MyBean" lazy-init="false"/>
    

    除了延迟实例化和预实例化外,Spring还支持懒加载和单例模式。

    1. 懒加载:懒加载是指在需要使用Bean时才进行初始化。当容器启动时,它只会读取所有的Bean定义,但不会立即创建Bean的实例。只有当第一次使用Bean时,容器才会创建该Bean的实例。这种方式可以减少启动时的开销,特别是对于一些比较复杂的Bean来说。

    2. 单例模式:单例模式是指同一个Bean在整个容器中只有一个实例。当容器启动时,它会根据配置文件中的Bean定义创建一个单例的Bean实例。然后,每次获取该Bean时,容器都会返回同一个实例。

    3. 原型模式:原型模式是指每次获取Bean时都会创建一个新的实例。当容器启动时,它会根据配置文件中的Bean定义创建一个原型的Bean实例。然后,每次获取该Bean时,容器都会创建一个新的实例并返回。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在 Spring 容器中,Bean 的实例化时机取决于 Bean 的作用域和生命周期配置。下面我们分别介绍一下不同作用域的 Bean 的实例化时机。

    1. Singleton(单例)作用域的 Bean:
      单例作用域的 Bean 在容器启动时就会被实例化。当容器启动时,会对所有定义的 Singleton Bean 进行实例化并放入容器中,以供后续使用。

    2. Prototype(原型)作用域的 Bean:
      原型作用域的 Bean 在每次被请求时都会被实例化。当容器中某个地方需要使用该原型 Bean 时,容器会根据 Bean 的定义每次都创建一个新的实例。

    3. Request(请求)作用域的 Bean:
      请求作用域的 Bean 在每次 HTTP 请求时都会被实例化。当有一个新的 HTTP 请求到来时,容器会根据 Bean 的定义创建一个新的实例,并将其与当前请求关联起来。

    4. Session(会话)作用域的 Bean:
      会话作用域的 Bean 在每个用户会话开始时(即用户登录时)被实例化。当用户登录时,容器会根据 Bean 的定义创建一个新的实例,并将其与当前用户的会话关联起来。

    具体的操作流程如下:

    1. 容器启动:当 Spring 容器启动时,会读取配置文件,并根据定义的 Bean 进行实例化。

    2. 实例化 Bean:容器根据 Bean 的定义信息,使用反射机制创建 Bean 的实例。

    3. 属性赋值:容器会根据 Bean 的定义中的属性配置,为创建的 Bean 实例设置属性值。

    4. Aware 回调:如果该 Bean 实现了 Aware 接口,容器会自动调用相应的 Aware 回调方法,以便将一些特定的资源注入到 Bean 中。

    5. 初始化方法:在 Bean 实例化完成后,容器会根据配置调用 Bean 的初始化方法。可以通过在 Bean 的定义中配置 init-method 属性来指定初始化方法。

    6. 注入依赖:容器会将其他依赖的 Bean 注入到当前实例中。

    7. 使用 Bean:经过上述的步骤,Bean 实例化并初始化完成后,可以通过容器获取该 Bean 实例,并在应用程序中使用。

    需要注意的是,并非所有的 Bean 都需要实例化。比如,当某个 Bean 的作用域是原型(Prototype)且没有被其他 Bean 依赖时,容器不会主动实例化该 Bean,而是等待被请求时才会创建。此外,有些 Bean 可能会实现 DisposableBean 接口,在容器关闭时会自行进行销毁操作。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部