Bean 的作用域

本文详细介绍了Spring框架中Bean的不同作用域,包括singleton、prototype、request、session和application等,并通过示例展示了如何配置和使用这些作用域。

Spring bean 的作用域包含

  • singleton
  • prototype

web 应用中再加上

  • request
  • session
  • application
  • websocket

基于上一篇的应用进行改造,加入 bean,设置作用域。

spring xml 加入 prototype 的 User

<bean id="user2" class="constxiong.User" scope="prototype"/>

在 Controller 中加入各种作用域 bean 的请求

package constxiong.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.WebApplicationContext;

import constxiong.User;

/**
 * controller
 * 
 * @author ConstXiong
 */
@Controller
public class IndexController {
	
	@Autowired
	private ApplicationContext context;
	
	@RequestMapping("singleton")
	@ResponseBody
	public String singlton() {
		User user1 = context.getBean("user1", User.class);
		return user1.toString();
	}
	
	@RequestMapping("prototype")
	@ResponseBody
	public String prototype() {
		User user2 = context.getBean("user2", User.class);
		return user2.toString();
	}
	
	@RequestMapping("request")
	@ResponseBody
	public String request() {
		User user3 = context.getBean("user3", User.class);
		return user3.toString();
	}
	
	@RequestMapping("session")
	@ResponseBody
	public String session() {
		User user4 = context.getBean("user4", User.class);
		return user4.toString();
	}
	
	@RequestMapping("application")
	@ResponseBody
	public String application() {
		User user5 = context.getBean("user5", User.class);
		return user5.toString();
	}
	
	@Bean
	@Scope(WebApplicationContext.SCOPE_REQUEST)
	private static User user3() {
		return new User();
	}
	
	@Bean
	@Scope(WebApplicationContext.SCOPE_SESSION)
	private static User user4() {
		return new User();
	}
	
	@Bean
	@Scope(WebApplicationContext.SCOPE_APPLICATION)
	private static User user5() {
		return new User();
	}
}

 

通过请求

  • http://localhost:8080/singleton,每次请求 User 都是同一个对象
  • http://localhost:8080/prototype,每次请求 User 都是不同的对象
  • http://localhost:8080/request,每次请求 User 都是不同的对象
  • http://localhost:8080/session,每一次会话周期内的请求 User 都是相同的对象,不同会话内间的 User 对象不同
  • http://localhost:8080/application,每个 ServletContext 内,返回同一个对象

 

完整代码:022-spring-bean-scope

 


【Java学习资源】整理推荐

 

 


【Java面试题与答案】整理推荐

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值