Spring学习笔记 关于Spring创建Bean的模式-Singleton(单例模式)和Prototype(三)

2014-11-24 08:49:29 · 作者: · 浏览: 4
个context获取两个不同的runnerBean对象。但是需要注意的是,因为runnerBean引用的singletonBean没有被设置为prototype,所以虽然创建除了两个不同的runnerBean对象,但他们所引用的singletonBean仍然是同一个。

[html]
scope="prototype">









所以单例模式在Spring中的使用需要额外的注意。

所有代码:

main方法类:

[java]
package beanscope;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanScopceMain
{

/**
* @comment [注释说明]
* @author 荣磊, 2012-7-17
*
* @param args
*/
public static void main(String[] args)
{
String springConfig = "beanscope/spring-config.xml";
//创建一个SpringContainer
ApplicationContext context = new ClassPathXmlApplicationContext(springConfig);

//通过SpringContainer取得runnerBeanOne
RunnerBeanRefToSingletonBean runnerBeanOne =
context.getBean("runnerBeanOne", RunnerBeanRefToSingletonBean.class);
//通过SpringContainer取得runnerBeanTwo
RunnerBeanRefToSingletonBeanTwo runnerBeanTwo =
context.getBean("runnerBeanTwo", RunnerBeanRefToSingletonBeanTwo.class);
//通过SpringContainer取得singletonBean
SingletonBean singletonBean =
context.getBean("singletonBean", SingletonBean.class);

//输出上一次操作singltonBean的Bean名称,
//因为在这之前没有对singletonBean的lastOperatedBy属性进行初始化,
//所以这里应该会输出none
singletonBean.showLastOperateBean();

//设置runnerBeanOne中singletonBean对象的上一次操作者信息为runnerBeanOne
runnerBeanOne.setMyNameToSingletonBean();
//通过singletonBean输出上一次操作者信息
singletonBean.showLastOperateBean();
//输出runnerBeanTwo中应用的singletonBean对象的上一次操作者信息
runnerBeanTwo.showLastOprBeanOfSingletonBean();

//设置runnerBeanOne中singletonBean对象的上一次操作者信息为runnerBeanTwo
runnerBeanTwo.setMyNameToSingletonBean();
//通过singletonBean输出上一次操作者信息
singletonBean.showLastOperateBean();
//输出runnerBeanOne中应用的singletonBean对象的上一次操作者信息
runnerBeanOne.showLastOprBeanOfSingletonBean();
}

}

SingletonBean类:

[java]
package beanscope;

/**
*

[功能描述]


*
* @author 荣磊
* @version 1.0, 2012-7-17
*/
public class SingletonBean
{
// 用来保存上次操作此Bean的对象
private String lastOperatedBy;
public String getLastOperatedBy()
{
return lastOperatedBy;
}
public void setLastOperatedBy(String lastOperatedBy)
{
this.lastOperatedBy = lastOperatedBy;
}

/**
*

[输出lastOperatedBy属性]


* @author 荣磊, 2012-7-17
*/
public void showLastOperateBean()
{
if(lastOperatedBy!=null)
System.out.println(lastOperatedBy);
else
System.out.println("none");
}
}

RunnerBeanRefToSingletonBean类:

[java]
package beanscope;

public class RunnerBeanRefToSingletonBean
{
private String beanName;
private SingletonBean singletonBean;

public String getBeanName()
{
return beanName;
}
public void setBeanName(String beanName)
{
this.beanName = beanName;
}
public SingletonBean getSingletonBean()
{
return sing