Bean(爪哇豆) 作用域

Bean 作用域

有七种作用域,分别为 singletonprototyperequestsessionglobalSessionapplicationwebsocket

singletonprototype最为常用。

singleton 作用域

<bean id="userDao" ... scope="singleton"></bean>

singleton是 Spring 容器默认的作用域,不必特意为 增加scope="singleton"

Bean 的作用域为singleton时,Spring 容器里只会有一个 Bean 实例。而且创建 Spring 实例之后,创建 Bean 的工作,也会紧随其后。

public static void main(String[] args) {
    ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    // 👆 这里创建 Bean ,接着调用 UserDao 的初始化方法
    UserDao userDao_1 = (UserDao) app.getBean("userDao");
    UserDao userDao_2 = (UserDao) app.getBean("userDao");
    // 👆 这里 userDao_1 和 userDao_2 的接收 Bean 实例
    System.out.println(userDao_1);
    System.out.println(userDao_2);
    // 👆 如果这里直接输出他俩的地址,会发现,地址是一样的
    // 如上所说,此类 Bean,Spring 容器内只会有一个实例
}

prototypesingleton是一定区别的。

prototype 作用域

<bean id="userDao" ... scope="prototype"></bean>

scope="prototype"需要特地写出来。

有些 Bean 得保持会话状态,这些 Bean 应使用prototype作用域。

singleton不同,Spring 容器中,prototype作用域的 Bean,可以有若干个。还有,这种 Bean 的创建,并不紧跟在创建 Spring 容器之后,而是在getBean时创建,也好理解,毕竟这种 Bean 可以有好几个,一开始就创建好,很不合理。

public static void main(String[] args) {
    ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    // 👆 这里只是创建 Spring 容器
    UserDao userDao_1 = (UserDao) app.getBean("userDao");
    UserDao userDao_2 = (UserDao) app.getBean("userDao");
    // 👆 这里创建 Bean 。接着调用 UserDao 的初始化方法
    //    创建了两个 Bean 实例,那就会调用两次初始化方法
    System.out.println(userDao_1);
    System.out.println(userDao_2);
    // 👆 如果这里直接输出他们两个的地址,会发现,地址是不同的
    // 如上所说,Spring 容器中,作用域为 prototype 的 Bean 可以有若干
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值