• Spring IOC容器与 Bean 管理 第3关:Bean 标签中的 scope 属性


    目录

    任务描述

    相关知识

    Bean标签的常用属性

    编程要求

    测试说明

    参考代码


    任务描述

    Bean标签中有许许多多的属性,不同的属性代表不同的含义,同一个属性又有不同的属性值。

    本关任务:区分scope属性中单例和多例的区别。

    相关知识

    为了完成本关任务,你需要掌握:

    • Bean 标签的常用属性;

    • Bean 标签中scope属性的区别。

    Bean标签的常用属性

    • id属性:用于指定配置对象的名称,不能包含特殊符号

    • class属性:创建对象所在类的全路径;

    • name属性:功能同id属性一致,但是name属性值中可以包含特殊符号,若bean标签上没有id属性,那么name可以作为id使用。

    • scope属性:

      • singleton:默认值,单例,该模式下程序只有一个实例;

      • prototype:多例。每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new xxxBean():不会在容器启动时创建对象;

      • requestWeb开发中,创建了一个对象,将这个对象存入request范围,request.setAttribute()

      • sessionWeb开发中,创建了一个对象,将这个对象存入session范围,session.setAttribute()

      • globalSession:一般用于Porlet应用环境,指的是分布式开发;非Porlet环境,globalSession等同于session

    实际开发中主要使用singletonprototype

    编程要求

    请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,要求如下:

    • 在配置文件applicationContext.xml中分别配置单例和多例的User类,User类全类名可通过右侧文件路径查看;

    • 完成Task类中getConfig()getSingle()getMultiton()三个方法:

      • getConfig()方法中实现获取Spring容器并返回,配置文件名为applicationContext.xml

      • getSingle()方法中通过ApplicationContext获取两个单例User类(改类可以右侧文件夹中进行查看),先后两个类都调用setName()方法,分别设置name属性值为张三丰张无忌

      • getMultiton()方法中通过ApplicationContext获取两个多例User类,先后两个类都调用setName()方法分别设置name属性值为张三丰张无忌

    提示:通过容器使用getBean方法获取对象的返回值为Object类型,要使用对象中的属性或方法,需将其返回值强转为你所需对象类型。

    测试说明

    补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

    预期输出:

    1. 单例User类输出结果:
    2. User{name='张无忌'}
    3. User{name='张无忌'}
    4. --------------------------
    5. 多例User类输出结果:
    6. User{name='张三丰'}
    7. User{name='张无忌'}

    参考代码

    applicationContext.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    5. <bean id="user" class="com.educoder.step1.User" >bean>
    6. <bean id="user2" class="com.educoder.step1.User" scope="prototype" >bean>
    7. beans>

     Task.java

    1. package com.educoder.step1;
    2. import org.springframework.context.ApplicationContext;
    3. import org.springframework.context.support.ClassPathXmlApplicationContext;
    4. import java.util.ArrayList;
    5. import java.util.List;
    6. public class Task {
    7. public ApplicationContext getConfig(){
    8. /********** Begin **********/
    9. ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
    10. return app;
    11. /********** End **********/
    12. }
    13. public List<User> getsingle(ApplicationContext app){
    14. List<User> list=new ArrayList<>();
    15. /********** Begin **********/
    16. User user = (User) app.getBean("user");
    17. User user2 = (User) app.getBean("user");
    18. user.setName("张三丰");
    19. user2.setName("张无忌");
    20. list.add(user);
    21. list.add(user2);
    22. /********** End **********/
    23. return list;
    24. }
    25. public List<User> getMultiton(ApplicationContext app){
    26. List<User> list=new ArrayList<>();
    27. /********** Begin **********/
    28. User user = (User) app.getBean("user2");
    29. User user2 = (User) app.getBean("user2");
    30. user.setName("张三丰");
    31. user2.setName("张无忌");
    32. list.add(user);
    33. list.add(user2);
    34. /********** End **********/
    35. return list;
    36. }
    37. }

  • 相关阅读:
    新手搭建服装小程序全攻略
    java诊断工具
    linux NC命令的本质
    【工作流引擎】Activiti的使用03
    【JavaScript】video标签配置及相关事件:
    Android Studio(数据存储)
    [Spring实战] 整合Spring/SpringMVC/Mybatis(SSM)实现登录功能(带前端)
    i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)
    电脑无法安装软件怎么办?
    hive的建表语句
  • 原文地址:https://blog.csdn.net/ycq0_9/article/details/127735074