目录
任务描述
Bean
标签中有许许多多的属性,不同的属性代表不同的含义,同一个属性又有不同的属性值。
本关任务:区分scope
属性中单例和多例的区别。
相关知识
为了完成本关任务,你需要掌握:
-
Bean 标签的常用属性;
-
Bean 标签中
scope
属性的区别。
Bean标签的常用属性
-
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
<?xml version="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">
<!-- 配置单例User类 -->
<bean id="user" class="com.educoder.step1.User" ></bean>
<!-- 配置多例User类 -->
<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;
}
}