Spring中Bean的作用域

来源:互联网 发布:郭正亮 知乎 编辑:程序博客网 时间:2024/04/30 23:01


要在XML中将bean的作用域,可以这样配置:
<bean id="bean的id" class="bean的包名.类名" scope="作用域">

Bean简介:

在spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。

Spring支持如下5种作用域:

singleton:(默认作用域)单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例。

<bean id="bean的id" class="bean的包名.类名" scope="singleton" lazy-init="true">

public class PersonService {

    public PersonService() {
       super();
       System.out.println("被实例化");
   }

   public void save() {
      System.out.println("save()方法");
  }
}

配置


<bean id="person" class="com.service.PersonService" scope="singleton"></bean> 

再测试

@Test
public void test() {
   ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
   PersonService us=(PersonService)ac.getBean("person");
}


默认情况下会在容器启动是初始化,
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");时就初始化bean,
会调用PersonService的无参构造,打印出:被实例化

但是我们可以指定Bean节点的lazy-init="true"来初始化bean,这时,只有第一次获取bean才会初始化bean。

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效。

session
:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效。

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

学习笔记


0 0
原创粉丝点击