快速上手Spring--6. Singleton的使用与否
来源:互联网 发布:摄影艺术赏析知乎 编辑:程序博客网 时间:2024/05/05 14:50
上篇文章已经谈了《Spring Framework 开发参考手册》的3.2.4小节——《Bean的标志符(id与name)》,现在继续3.2.5小节——《Singleton的使用与否》。
文档已经把Singleton说的很清楚了,这里也不废话了。主要是了解在Spring中,默认的部署方式是Singleton,没有特别需要的话,一般使用Singleton。
相关软件的配置可以参考《快速上手Spring--2.HelloWorld(1)》。
这里还是以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);
}
}
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>
<!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));
}
}
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
输出随机整数: 7
Hello! 这是singletonBean!
输出随机整数: 7
h1==h2: true
Hello! 这是prototypeBean!
输出随机整数: 95
Hello! 这是prototypeBean!
输出随机整数: 60
h3==h4: false
输出随机整数: 95
Hello! 这是prototypeBean!
输出随机整数: 60
h3==h4: false
·这篇文章和上篇文章的源代码下载(不包含库文件):http://free.ys168.com/?javamxj Spring目录下面的SpringBasic.zip。
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--6. Singleton的使用与否
- Spring-----------------Singleton的使用与否
- Spring笔记之六(IoC Singleton) 单例的使用与否
- Konva的使用快速上手
- tableExport的快速上手及快速使用
- 使用Spring Boot与否,初始化Spring应用的对比
- 快速上手Spring--7. ref的用法
- 快速上手Spring--7. ref的用法
- 快速上手Spring--7. ref的用法
- 快速上手Spring--7. ref的用法
- 快速上手Spring--7. ref的用法
- 快速上手Spring
- Spring Cloud快速上手
- 这篇博客的目的在于简单介绍如何快速上手使用Spring MVC框架
- 转载 写给symbian os开发初学者
- 快速上手Spring--2.HelloWorld(2)
- 快速上手Spring--3. 加载Bean的配置文件
- 快速上手Spring--4.安装和使用SpringIDE
- 快速上手Spring--5.Bean的标志符(id与name)
- 快速上手Spring--6. Singleton的使用与否
- 快速上手Spring--7. ref的用法
- 快速上手Spring--8. 集合对象注入
- 快速上手Spring--9. Lookup方法注入
- 快速上手Spring--10. 任意方法的替换
- 快速上手Spring--11. 自动绑定和依赖检查
- [收藏]随想Web2.0 的过去与未来
- Java代码查询网站
- [索引帖]Spring: A Developer's Notebook笔记和小结(共21篇,结束)