ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring注解驱动开发——组件注册 @Scope设置组件作用域

2021-07-25 22:35:51  阅读:176  来源: 互联网

标签:容器 person 作用域 System println applica 组件 Scope out


@Scope

      prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。

 每次获取的时候才会调用方法创建对象;

     singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。

 以后每次获取就是直接从容器(map.get())中拿,

     request:同一次请求创建一个实例

     session:同一个session创建一个实例

@Scope("prototype")

      prototype:多实例的

conf配置文件

    @Scope("prototype")
    @Bean
    public Person person(){
return new Person("张三",99);
    }

Junit测试

    @Test
    public void test02(){
        String [] af=applica.getBeanDefinitionNames();
//        for (String string : af) {
//            System.out.println(string);
//        }
      System.out.println("ioc容器创建完成");
      Object obj=  applica.getBean("person");
      Object obj2=  applica.getBean("person");
      
      System.out.println(obj);
      System.out.println(obj2);
      System.out.println(obj2==obj);
    }

输出

 

 

 不相等说明不是同一个对象,是多实例的。

@Scope("singleton")

singleton:单实例的(默认值---》即不写也是单实例)

conf配置文件

    
    @Scope("singleton")
    @Bean
    public Person person(){
        System.out.println("给容器中添加person");
        return new Person("张三",99);
    }
    

输出

 

 同一对象

@Scope

singleton:单实例的(默认值---》即不写也是单实例)

 

conf配置文件

    
    @Scope("singleton")
    @Bean
    public Person person(){
        System.out.println("给容器中添加person");
        return new Person("张三",99);
    }
    

输出

 

确实如此

  singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。

 以后每次获取就是直接从容器(map.get())中拿。

测试

 

    @Scope("singleton")
    @Bean
    public Person person(){
        System.out.println("给容器中添加person");
        return new Person("张三",99);
    }
    @Test
    public void test02(){
        //创建ioc容器
        ApplicationContext applica=    new     AnnotationConfigApplicationContext(MyConf2.class);

//        String [] af=applica.getBeanDefinitionNames();
////        for (String string : af) {
////            System.out.println(string);
////        }
//      System.out.println("ioc容器创建完成");
//      Object obj=  applica.getBean("person");
//      Object obj2=  applica.getBean("person");
//      
//      System.out.println(obj);
//      System.out.println(obj2);
//      System.out.println(obj2==obj);
    }
    

输出

 

 

      prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。

 每次获取的时候才会调用方法创建对象;

测试

    @Scope("prototype")
    @Bean
    public Person person(){
        System.out.println("给容器中添加person");
        return new Person("张三",99);
    }
    @Test
    public void test02(){
        //创建ioc容器
        ApplicationContext applica=    new     AnnotationConfigApplicationContext(MyConf2.class);

//        String [] af=applica.getBeanDefinitionNames();
////        for (String string : af) {
////            System.out.println(string);
////        }
//      System.out.println("ioc容器创建完成");
//      Object obj=  applica.getBean("person");
//      Object obj2=  applica.getBean("person");
//      
//      System.out.println(obj);
//      System.out.println(obj2);
//      System.out.println(obj2==obj);
    }
    

输出

 

并没有输出

再次测试

 

 

 

 发现获取的时候创建了对象。

 

标签:容器,person,作用域,System,println,applica,组件,Scope,out
来源: https://www.cnblogs.com/mangoubiubiu/p/15059248.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有