博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring常见注解 ----Scope
阅读量:6001 次
发布时间:2019-06-20

本文共 2452 字,大约阅读时间需要 8 分钟。

@Scope的作用  调整组件的作用域

package common.config;import common.bean.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Scope;@Configurationpublic class MainConfig2 {    /*     * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE     * @see ConfigurableBeanFactory#SCOPE_SINGLETON     * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST     * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION     * prototype:多实例的     * singleton:单实例的     * request:同一次请求创建一个实例     * session:同一个session创建一个实例     */    @Scope(value = "singleton")    @Bean    public Person person() {        System.out.println("创建person");        return new Person("lisi", 21);    }}
package common;import common.bean.Person;import common.config.MainConfig2;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class MainTest {    @Test    public void test() {        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig2.class);        System.out.println("IOC容器创建完成");        Person person = (Person) applicationContext.getBean("person");        Person person1 = (Person) applicationContext.getBean("person");        System.out.println(person == person1);    }}

运行测试代码打印内容为:

3df43e93ee2d8a9058551bfce65d5446f7c.jpg

可以看出当scope的value为singleton(默认值)时,IOC容器启动时会调用方法创建对象放到IOC容器中,以后每次获取都是从容器中直接获取。因此单实例情况下,不论什么时候获取实例,都是同一个。

再次改为多实例

package common.config;import common.bean.Person;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Scope;@Configurationpublic class MainConfig2 {    /*     * @see ConfigurableBeanFactory#SCOPE_PROTOTYPE     * @see ConfigurableBeanFactory#SCOPE_SINGLETON     * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST     * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION     * prototype:多实例的     * singleton:单实例的     * request:同一次请求创建一个实例     * session:同一个session创建一个实例     */    @Scope(value = "prototype")    @Bean    public Person person() {        System.out.println("创建person");        return new Person("lisi", 21);    }}

执行上述测试代码,运行结果为:

4c30aab3056b3284a5e706b5d8deb6190de.jpg

scope的value为prototype时,IOC容器启动时并不会调用方法创建对象放在容器中。而是每次获取的时候才会调用方法创建对象。

 

 

转载于:https://my.oschina.net/wuyiyi/blog/1922124

你可能感兴趣的文章
C++基础--文件信息读取
查看>>
MySQL的binlog详解(转)
查看>>
简单介绍下Docker命令
查看>>
数据库迁移expdp impdp 与 OGg 搭建
查看>>
转 UTL_FILE Throws ORA-29284 Or ORA-29283 When Attempting To READ File
查看>>
12C 连接方式和 Oracle Easy Connect Naming method
查看>>
MVC和WEBAPI(一)
查看>>
c++ 做的生化危机4内存修改器
查看>>
Unix环境编程之定时、信号与中断
查看>>
目标检测之行人检测(Pedestrian Detection)---行人检测之简介0
查看>>
03 Android之我的第一个.hello world 程序
查看>>
Python-条件语句和循环语句
查看>>
百度搜索引擎
查看>>
CCF网站提供的资源
查看>>
豆瓣商业化:小清新文艺范必须远离铜臭?
查看>>
ul li列表元素浮动导致border没有底边解决办法
查看>>
leetcode — longest-substring-without-repeating-characters
查看>>
文件操作
查看>>
1.3 IDAE安装GO插件
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第10周学习总结
查看>>