文档已经把Singleton说的很清楚了,这里也不废话了。主要是了解在Spring中,默认的部署方式是Singleton,没有特别需要的话,一般使用Singleton。
这里还是以HelloBean为例,这三个文件都放在包javamxj.spring.basic.singleton下。
· HelloBean
这里多加了属性i,用它得到随机数。
HelloBean.java
|
package javamxj.spring.basic.singleton;
public class HelloBean {
private String helloWorld;
private int i = (int) (100 * Math.random());
public HelloBean(String helloWorld) { this.helloWorld = helloWorld; }
public void sayHello() { System.out.println(helloWorld); System.out.println("输出随机整数: " + i); } }
|
· 配置文件
在这个Beans中,定义了两个bean,都指向HelloBean类,主要不同就是第二个bean指明了singleton="false",即不采用singleton部署方式。
bean.xml
|
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> <bean id="singletonBean" class="javamxj.spring.basic.singleton.HelloBean"> <constructor-arg> <value>Hello! 这是singletonBean!</value> </constructor-arg> </bean>
<bean id="prototypeBean" class="javamxj.spring.basic.singleton.HelloBean" singleton="false"> <constructor-arg> <value>Hello! 这是prototypeBean! </value> </constructor-arg> </bean>
</beans>
|
· 测试程序:
分别取得singletonBean和prototypeBean各两个实例,然后输出随机数,最后比较同一个bean的两个实例的引用是否相同。
Main.java
|
package javamxj.spring.basic.singleton;
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource;
public class Main { public static void main(String[] args) {
Resource res = new ClassPathResource("javamxj/spring/basic/singleton/bean.xml"); BeanFactory factory = new XmlBeanFactory(res);
HelloBean h1 = (HelloBean) factory.getBean("singletonBean"); h1.sayHello(); HelloBean h2 = (HelloBean) factory.getBean("singletonBean"); h2.sayHello(); System.out.println("h1==h2: " + (h1==h2)); System.out.println(""); HelloBean h3 = (HelloBean) factory.getBean("prototypeBean"); h3.sayHello(); HelloBean h4 = (HelloBean) factory.getBean("prototypeBean"); h4.sayHello(); System.out.println("h3==h4: " + (h3==h4)); } }
|
·运行,控制台输出:
Hello! 这是singletonBean!
输出随机整数: 7
Hello! 这是singletonBean!
输出随机整数: 7
h1==h2: true
Hello! 这是prototypeBean!
输出随机整数: 95
Hello! 这是prototypeBean!
输出随机整数: 60
h3==h4: false