目录
Bean
标签中有许许多多的属性,不同的属性代表不同的含义,同一个属性又有不同的属性值。
本关任务:区分scope
属性中单例和多例的区别。
为了完成本关任务,你需要掌握:
Bean 标签的常用属性;
Bean 标签中scope
属性的区别。
id
属性:用于指定配置对象的名称,不能包含特殊符号;
class
属性:创建对象所在类的全路径;
name
属性:功能同id
属性一致,但是name
属性值中可以包含特殊符号,若bean
标签上没有id
属性,那么name
可以作为id
使用。
scope
属性:
singleton
:默认值,单例,该模式下程序只有一个实例;
prototype
:多例。每次从容器中调用Bean
时,都返回一个新的实例,即每次调用getBean()
时,相当于执行new xxxBean()
:不会在容器启动时创建对象;
request
:Web
开发中,创建了一个对象,将这个对象存入request
范围,request.setAttribute()
;
session
:Web
开发中,创建了一个对象,将这个对象存入session
范围,session.setAttribute()
;
globalSession
:一般用于Porlet
应用环境,指的是分布式开发;非Porlet
环境,globalSession
等同于session
。
实际开发中主要使用singleton
,prototype
。
请仔细阅读右侧代码,根据方法内的提示,在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
类型,要使用对象中的属性或方法,需将其返回值强转为你所需对象类型。
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。
预期输出:
单例User类输出结果:
User{name='张无忌'}
User{name='张无忌'}
--------------------------
多例User类输出结果:
User{name='张三丰'}
User{name='张无忌'}
applicationContext.xml
- "1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
- <bean id="user" class="com.educoder.step1.User" >bean>
-
- <bean id="user2" class="com.educoder.step1.User" scope="prototype" >bean>
- beans>
Task.java
- package com.educoder.step1;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import java.util.ArrayList;
- import java.util.List;
- public class Task {
- public ApplicationContext getConfig(){
- /********** Begin **********/
- ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
- return app;
- /********** End **********/
- }
- public List<User> getsingle(ApplicationContext app){
- List<User> list=new ArrayList<>();
- /********** Begin **********/
- User user = (User) app.getBean("user");
- User user2 = (User) app.getBean("user");
- user.setName("张三丰");
- user2.setName("张无忌");
- list.add(user);
- list.add(user2);
- /********** End **********/
- return list;
- }
- public List<User> getMultiton(ApplicationContext app){
- List<User> list=new ArrayList<>();
- /********** Begin **********/
- User user = (User) app.getBean("user2");
- User user2 = (User) app.getBean("user2");
- user.setName("张三丰");
- user2.setName("张无忌");
- list.add(user);
- list.add(user2);
- /********** End **********/
- return list;
- }
- }