spring开发_spring中Bean的作用域_singleton_prototype
2013-02-18 18:04
681 查看
项目结构:http://www.cnblogs.com/hongten/gallery/image/112385.html这里需要设置环境:添加如下jar包commons-logging.jarspring.jar/spring_0003_bean的作用域/src/com/b510/bean/dao/PrototypeBeanDao.java
/spring_0003_bean的作用域/src/com/b510/bean/dao/SingletonBeanDao.java
/spring_0003_bean的作用域/src/com/b510/bean/PrototypeBean.java
/spring_0003_bean的作用域/src/com/b510/bean/SingletonBean.java
/spring_0003_bean的作用域/src/beans.xml
/spring_0003_bean的作用域/src/com/b510/test/BeanTest.java
运行效果:
我们看到:使用singleton的时候,singletonBeanDao与singletonBeanDao1是同一个对象;而使用prototype的时候,prototypeBeanDao与prototypeBeanDao1不是同一个对象;他是在系统调用的时候,才new出来的。而singleton是一次创建,多次使用。
1 package com.b510.bean.dao; 2 3 /** 4 * 原型模式dao 5 * 6 * @author Hongten 7 * 8 */ 9 public interface PrototypeBeanDao { 10 11 /** 12 * 原型模式 13 */ 14 public abstract void prototype(); 15 16 }
/spring_0003_bean的作用域/src/com/b510/bean/dao/SingletonBeanDao.java
1 package com.b510.bean.dao; 2 3 /** 4 * 单例模式dao 5 * 6 * @author Hongten 7 * 8 */ 9 public interface SingletonBeanDao { 10 11 /** 12 * 单例模式 13 */ 14 public abstract void singleton(); 15 16 }
/spring_0003_bean的作用域/src/com/b510/bean/PrototypeBean.java
1 package com.b510.bean; 2 3 import com.b510.bean.dao.PrototypeBeanDao; 4 5 /** 6 * 原型模式prototype 7 * 8 * @author Hongten 9 * 10 */ 11 public class PrototypeBean implements PrototypeBeanDao { 12 13 /* (non-Javadoc) 14 * @see com.b510.bean.PrototypeBeanDao#prototype() 15 */ 16 public void prototype() { 17 System.out 18 .println("原型模式,每次通过容器的getBean方法获取prototype定义的Bean,都将产生一个新的Bean实例"); 19 } 20 }
/spring_0003_bean的作用域/src/com/b510/bean/SingletonBean.java
1 package com.b510.bean; 2 3 import com.b510.bean.dao.SingletonBeanDao; 4 5 /** 6 * 单例模式singleton 7 * 8 * @author Hongten 9 * 10 */ 11 public class SingletonBean implements SingletonBeanDao { 12 13 /* (non-Javadoc) 14 * @see com.b510.bean.SingletonBeanDao#singleton() 15 */ 16 public void singleton() { 17 System.out.println("单例模式,在整个spring IoC容器中,使用singleton定义Bean将只有一个实例"); 18 } 19 }
/spring_0003_bean的作用域/src/beans.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 6 <bean id="single" class="com.b510.bean.SingletonBean"></bean> 7 <bean id="proto" class="com.b510.bean.PrototypeBean" scope="prototype"></bean> 8 </beans>
/spring_0003_bean的作用域/src/com/b510/test/BeanTest.java
1 package com.b510.test; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.b510.bean.dao.PrototypeBeanDao; 7 import com.b510.bean.dao.SingletonBeanDao; 8 /** 9 * 测试类,在此类中,我们主要是测试singleton(单例模式)和prototype(原型模式) 10 * 如果不指定Bean的作用域,spring会默认指定Bean的作用域为singleton(单例模式),java在创建java实例 11 * 的时候,需要进行内存申请;销毁实例的时候,需要完成垃圾回收,而这些工作都会导致系统开销的增加。 12 * prototype(原型模式)作用域的创建,销毁代价比较大;singleton(单例模式)作用域的Bean实例一次就可以 13 * 重复利用,因此,我们尽量用singleton(单例模式),除非有必要有prototype(原型模式)。 14 * 15 * @author Hongten 16 * 17 */ 18 public class BeanTest { 19 20 /** 21 * @param args 22 */ 23 public static void main(String[] args) { 24 new BeanTest().instanceContext(); 25 } 26 27 public void instanceContext() { 28 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 29 SingletonBeanDao singletonBeanDao = (SingletonBeanDao) ctx 30 .getBean("single"); 31 singletonBeanDao.singleton(); 32 SingletonBeanDao singletonBeanDao1 = (SingletonBeanDao) ctx 33 .getBean("single"); 34 singletonBeanDao1.singleton(); 35 System.out.print("singletonBeanDao与singletonBeanDao1是否是同一个:"); 36 System.out.println(singletonBeanDao1==singletonBeanDao); 37 PrototypeBeanDao prototypeBeanDao = (PrototypeBeanDao) ctx 38 .getBean("proto"); 39 prototypeBeanDao.prototype(); 40 PrototypeBeanDao prototypeBeanDao1 = (PrototypeBeanDao) ctx 41 .getBean("proto"); 42 prototypeBeanDao1.prototype(); 43 System.out.print("prototypeBeanDao与prototypeBeanDao1是否是同一个:"); 44 System.out.println(prototypeBeanDao==prototypeBeanDao1); 45 46 } 47 48 }
运行效果:
1 2012-3-6 18:19:34 org.springframework.context.support.AbstractApplicationContext prepareRefresh 2 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@c1b531: display name [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]; startup date [Tue Mar 06 18:19:34 CST 2012]; root of context hierarchy 3 2012-3-6 18:19:34 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 4 信息: Loading XML bean definitions from class path resource [beans.xml] 5 2012-3-6 18:19:34 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory 6 信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@c1b531]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1507fb2 7 2012-3-6 18:19:34 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 8 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1507fb2: defining beans [single,proto]; root of factory hierarchy 9 单例模式,在整个spring IoC容器中,使用singleton定义Bean将只有一个实例 10 单例模式,在整个spring IoC容器中,使用singleton定义Bean将只有一个实例 11 singletonBeanDao与singletonBeanDao1是否是同一个:true 12 原型模式,每次通过容器的getBean方法获取prototype定义的Bean,都将产生一个新的Bean实例 13 原型模式,每次通过容器的getBean方法获取prototype定义的Bean,都将产生一个新的Bean实例 14 prototypeBeanDao与prototypeBeanDao1是否是同一个:false
我们看到:使用singleton的时候,singletonBeanDao与singletonBeanDao1是同一个对象;而使用prototype的时候,prototypeBeanDao与prototypeBeanDao1不是同一个对象;他是在系统调用的时候,才new出来的。而singleton是一次创建,多次使用。
相关文章推荐
- spring开发_spring中Bean的作用域_singleton_prototype
- spring开发_spring中Bean的作用域_singleton_prototype
- Spring 中 bean 的作用域:singleton;prototype;WEB 环境作用域
- 【Spring】bean的作用域(@Scope) - singleton、prototype
- Spring容器中Bean的作用域之singleton和prototype
- 使用Spring(七)集合合并、bean的作用域(prototype,singleton)
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
- Spring IOC之bean的scope属性值:prototype与singleton
- 10010---bean 的作用域:singleton;prototype;WEB 环境作用域
- Spring学习笔记 关于Spring创建Bean的模式-Singleton(单例模式)和Prototype
- Spring IOC之bean的scope属性值:prototype与singleton
- Spring Bean Scope Singleton Prototype 相互引用说明
- 《转》详解Spring中bean的scope singleton prototype request...
- JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式
- Spring学习笔记 关于Spring创建Bean的模式-Singleton(单例模式)和Prototype
- spring bean scope=prototype/singleton的差别
- spring创建bean模式singleton与prototype的区别
- Spring源码学习之bean的prototype和singleton类型
- spring中bean的作用域single与prototype区别
- spring配置文件中bean中scope属性prototype和singleton