Loading

Spring Bean的作用域

1 bean的作用域

在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象 .

image

官方介绍
image

1.1 单例模式(Spring默认机制)

当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。注意,Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton,可以这样配置:

<bean id="User2" class="com.zhang.pojo.User" c:age="18" c:name="老李" scope="singleton"/>
@Test
public void test1(){
    ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
    User user1 = context.getBean("User2", User.class);
    User user2 = context.getBean("User2", User.class);
    System.out.println(user1==user2);
}
  • 说明user1和user2是同一个对象,即是有且只有一个user

image

1.2 原型模式

每次从容器中get的时候,都会产生一个新的对象,不像单例模式

当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。在XML中将bean定义成prototype,可以这样配置:

<bean id="User2" class="com.zhang.pojo.User" c:age="18" c:name="老李" scope="prototype"/>
  • 说明user1和user2不是同一个对象,即是生成了两个user

1.3 其余模式

如request,session,application(全局活着)这些只能在web开发中使用!

posted @ 2022-03-26 21:54  Cn_FallTime  阅读(23)  评论(0编辑  收藏  举报