SSM的学习(四)---Bean的作用域及id和name的区别

SSM的学习(四)—Bean的作用域及id和name的区别

Bean的作用域

作用域限定了Spring Bean的作用范围,在Spring配置文件定义Bean时,通过声明scope配置项,可以灵活定义Bean的作用范围。当你希望每次IOC容器返回的Bean是同一个实例时,可以设置scope为singleton;当你希望IOC容器返回的Bean实例是一个新的实例时,可以设置scope为prototype。

scope配置项有5个属性,用于不同的作用域。

singleton

使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

singleton是默认的作用域,当定义Bean时,如果没有指定scope配置项,Bean的作用域被默认为singleton。
singleton属于单例模式,在整个系统上下文环境中,仅有一个Bean实例。
也就是说,在整个系统上下文环境中,你通过Spring IOC获取的都是同一个实例。
prototype

使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

当一个Bean的作用域被定义prototype时,意味着程序每次从IOC容器获取的Bean都是一个新的实例。
因此,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。
request

该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。

session

该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

global-session

该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

最为常见的是singleton(单例模式)和prototype(多例模式)下面记录一下实现的两种方式:

第一种xml配置:

<bean class="com.yangyang.bean" id="user" scope="prototype">

当不配置scope或scope的值为singleton时默认为单例模式

第二种java配置:

@Configuration
public class PersonnelConfig {

    @Bean
    @Scope("prototype")
    public Personnel PersonnelBoss(){
        Personnel ds = new Personnel();
        ds.setUrl("dev:8080");
        ds.setUserName("人事部Boss");
        ds.setPassword("1234");
        return ds;
    }

id和name的区别

在xml配置中,既可以通过id或name给bean指定一个唯一标识符,大部分情况下是没有区别的,有一个小区别需要注意:

name支持多个值同时标注但id不支持即使用逗号隔开但标识不变。例如

<bean class="com.yangyang.bean" name=“user1,user2,user3” scope="prototype">

此时通过user1,user2,user3都可以获取到该bean

<bean class="com.yangyang.bean" id="user1,user2,user3" scope="prototype">

此时只能通过(user1,user2,user3)来获取该bean

混合配置

在实际开发中,许多的开发人员的习惯不同,导致有的喜欢用xml有的喜欢注解。但如果想要混合开发需要如下注释:

@Configuration
@ImportResource("classpath:applicationContext.xml")
public class User(){
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值