spring中bean的singleton属性

1.  UserDao.java

package com.lxh.springSingleton;

public interface UserDao {
	// 保存User
	public void save();
}

2.  UserDaoImpl.java

package com.lxh.springSingleton;

public class UserDaoImpl implements UserDao {

	@Override
	public void save() {
		System.out.println("save user ...");
	}

}

3.  UserService.java

package com.lxh.springSingleton;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserService {
	// ApplicationContext
	public static ApplicationContext context = new ClassPathXmlApplicationContext(
			UserService.class.getResource("").toString()
					+ "/applicationContext.xml");
	// 日志
	private static Logger logger = Logger.getLogger(UserService.class);
	// 属性
	private UserDao userDaoImpl;

	// set,get
	public UserDao getUserDaoImpl() {
		return userDaoImpl;
	}

	public void setUserDaoImpl(UserDao userDaoImpl) {
		this.userDaoImpl = userDaoImpl;
	}

	// userService
	public static void main(String[] args) {
		System.out.println();
		UserService us = (UserService) context.getBean("userService");
		UserService us2 = (UserService) context.getBean("userService");

		logger.info("*****"+us +","+us2+"*****");
		logger.info("*****"+us.userDaoImpl+","+us2.userDaoImpl+"*****");

	}
}

4.  applicationContext.xml (singleton="false")

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="userDao" class="com.lxh.springSingleton.UserDaoImpl" singleton="false"/>
	<bean id="userService" class="com.lxh.springSingleton.UserService" singleton="false">
		<property name="userDaoImpl" ref="userDao"/>
	</bean>
</beans>

5.  applicationContext.xml (singleton="true")

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="userDao" class="com.lxh.springSingleton.UserDaoImpl" singleton="true"/>
	<bean id="userService" class="com.lxh.springSingleton.UserService" singleton="true">
		<property name="userDaoImpl" ref="userDao"/>
	</bean>
</beans>

6.  singleton="false" 运行结果

7.  singleton="true"  运行结果

8.  小结:

通过以上分析可以得出结论:在spring的bean配置中,若singleton=“false”,则该bean为非单例,即每请求一次,就会重新创建一个;若singleton=“true”则结论相反。

补充:默认情况下,singleton=“true”.

时间: 2024-10-26 16:14:36

spring中bean的singleton属性的相关文章

spring中bean的作用域属性singleton与prototype的区别

1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例.换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例.这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singl

Spring中Bean的作用域属性

当一个bean的作用域设置为singleton, 那么spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例.换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例.这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设

spring中bean的作用域属性single与prototype的区别

http://blog.csdn.net/linwei_1029/article/details/18408363   1. 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例.换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例.这个单一实例会被存储到单例缓存(singleton c

spring中 &lt;bean parent=&quot; &quot;&gt; parent属性的作用

第一步: 新建工程  SecondSpring 文件目录结构如下: 第二步:导入spring 相应的jar包 过程略... 第三步: 新建类 ParentClass.java package com.xuzhiwen.spring7; public class ParentClass { public String name; public int age; public String hobby; public void setHobby(String hobby) { this.hobby

JAVA面试题:Spring中bean的生命周期

Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题. 然而在spring中 可以设定每次从BeanFactory或Appl

Spring 中bean的scop 阅读随笔(记)

bean的scope scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象. Spring容器最初提供了两种bean的scope类型:singleton和prototype,但发布2.0之后,又引入了另外三种scope类型,即request.session和global session类型.不过这三种类型有所限制,只能在Web应用中使用.也就是说,只有在

Spring(二) Spring中的AOP和属性注入

一.AOP(Aspect Oriented Programing)面向切面编程 AOP的终极目标:让我们可以专心做事 下面通过一个例子来介绍AOP的具体使用 案例的要求:使用AOP实现日志记录系统 ,  核心模块  和    增强  单独  开发  ,运行时再组装 首先定义接口和方法 接口和实现类中的代码,我放在一起了,应该比较简单 package demo04.dao; /** * Created by mycom on 2018/3/5. */ public interface IHello

Spring:Spring中bean的生命周期

Spring中,从BeanFactory或ApplicationContext取得的实例为Singleton(单例模式),就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题. 然而在spring中 可以设定每次从BeanFactory或ApplicationContext指定别名并

Spring中Bean的生命周期

Spring中Bean的生命周期过程: 1.Spring对Bean进行实例化(相当于程序中的new Xx()) 2.Spring将值和Bean的引用注入进Bean对应的属性中 3如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法 (实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有在Bean的ID的) 4.如果Bean实现了BeanFactoryAware接口,Spring将调用se