我们在Spring中定义一个Bean时,需要声明该Bean的作用域, 默认值是singleton。 Spring框架支持的作用域有以下几种: 1、 singleton : singleton 是默认的作用域, 当将一个bean设置为singleton作用域的时,Spring IoC容器只会创建该bean定义的唯一实例。 Singleton是单例类型, 在 SpringIOC容器创建的时候,就会创建这个Bean的对象。 具体使用: scope="singleton" 创建bean:
<!--创建Bean, id 是该bean的唯一标识, class是指定用来创建 bean 的类, scope指定作用域--> <bean id="city" class="com.entity.City" scope="singleton"> <constructor-arg name="cityId" value="3"></constructor-arg> <constructor-arg name="cityName" value="北京"></constructor-arg> </bean>程序中获取bean: 并比较两次getBean的结果, 返回为 true
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("Spring-config/application.xml"); City city = (City) context.getBean("city"); City city1 = (City) context.getBean("city"); System.out.println(city == city1);输出是 : 2、prototype: scope = “prototype” 当该bean的作用域为 prototype 时, 一个bean对应多个对象实例, 每次请求该bean都会得到不同的对象实例 Prototype是原型类型,在我们创建SpringIOC容器时,并不会实例化,而是当我们获取bean的时候才会去创建一个对象。
创建bean:
<bean id="city" class="com.entity.City" scope="prototype"> <constructor-arg name="cityId" value="3"></constructor-arg> <constructor-arg name="cityName" value="北京"></constructor-arg> </bean>获取bean: 比较两次结果,返回为false
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("Spring-config/application.xml"); City city = (City) context.getBean("city"); City city1 = (City) context.getBean("city"); System.out.println(city == city1);结果: 下面两种作用域仅适用于 WebApplicationContext环境 3、request :每次HTTP请求都会创建一个新的Bean 4、session : 在一个session中返回的都是同一个Bean