Spring-Bean标签属性scope范围
scope:指对象的作用范围,取值如下
1.singleton:默认值,单例的
2.prototype:多例的
3.request:WEB项目,Spring创建一个Bean的对象,把对象存入到request域中
4.sessin:WEB项目,Spring创建一个Bean的对象,把对象存入到sessiont域中
5.global session:WEB项目中,应用在Portlet环境,如果没有Protlet环境那么globalSession相当于session
当前只了解singleton和prototype
===================================================
singleton如下
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.hao.dao.impl.UserDaoImpl" scope="singleton"></bean>
</beans>
测试类
public class SpringTest {
@Test
//测试scope属性
public void test1(){
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
System.out.println(userDao1==userDao2);
}
}
结果:true
说明容器当中是单一对象
那UserDaoImpl什么时候被创建呢?那就来测试一下
1.重写空参构造方法
public class UserDaoImpl implements UserDao {
public UserDaoImpl(){
System.out.println("UserDaoImpl被创建了");
}
@Override
public void save() {
System.out.println("save running...");
}
}
2.打断点,调试
我们发现在断点处,当加载配置文件,创建spring容器时,UserDaoImpl被创建了
================================================================================================
prototype测试如下
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.hao.dao.impl.UserDaoImpl" scope="prototype"></bean>
</beans>
1.重写UserDaoImpl空参构造方法(同上,省略代码)
2.断点调试
我们发现当加载配置文件,创建spring容器时,UserDaoImpl类对象没有被创建,继续走下一步
我们发现当调用getBean时,创建了UserDaoImpl对象,继续执行下一步
我们发现再此getBean时,另外一个UserDaoImpl对象也被创建了,而且我们发现两个对象的地址不一样
说明prototype是多实例对象,且在调用getBean方法时创建类对象
======================================================================================================
总结:
1)当scope属性取值为singleton时
Bean实例化个数:1个
Bean的实例化时机,当Spring核心配置文件被加载时,实例化配置的Bean实例(创建对象)
Bean的生命周期
*对象创建:当加载应用,创建容器时,对象就被创建了
*对象运行:只要容器在,对象一直活着
*对象销毁:当应用卸载,销毁容器时,对象被销毁
2)当scope属性取值为prototype时
Bean实例化个数:多个
Bean的实例化时机,当调用getBean()方法时,实例化Bean实例(创建对象)
Bean的生命周期
*对象创建:当使用对象时,创建新的对象实例
*对象运行:只要容器在,对象一直活着
*对象销毁:当对象长时间不用时,就被Java的垃圾回收器(GC)回收了
Spring-Bean标签属性scope范围的更多相关文章
- spring中的bean的属性scope
spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得be ...
- Spring中bean作用域属性scope
关键字: spring中属性scope的prototype是什么意思 默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spri ...
- Spring Bean 标签解析
上一篇文章讲到了标签在 parseDefaultElement 方法中进行解析,本篇文章将讲解这部分内容 bean 标签解析 查看 processBeanDefinition 方法,针对各个操作作具体 ...
- 1-3 Spring Bean 的属性值设置
详见http://www.cnblogs.com/chenssy/archive/2013/03/17/2964593.html 1.注入普通的属性值 <bean id="Cat&qu ...
- Spring配置文件中<bean>标签的scope属性
转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...
- spring bean标签常用属性
一.id属性 其名称,可以是任意名称,但不能包含特殊符号. 根据id得到配置对象. 二.class属性 创建对象所在的类名称 三.name属性 功能和id属性一样,但name属性值可以包含特殊属性 四 ...
- 利用 spring bean 的属性 init-method 解决因为数据库连接没有初始化而导致首次点击页面超慢的问题
问题的描述: 一个项目,涉及到了 两个数据源,分别使用的是 两个不同的 数据库连接池,其中一个是 poxool 连接池,问题在于,spring在启动时,只初始化其中的一个 数据库连接池中的数据库连接, ...
- spring bean parent属性详解
必要条件:1.子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性. 2.父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工厂实例化 ...
- Spring<bean>标签是反射来实现的
随机推荐
- 还不会用springboot写接口?快看这里,手把手操作,一发入魂~
1.springboot简介 Spring Boot 可以轻松创建可以"直接运行"的独立的.生产级的基于 Spring 的应用程序. 特征 创建独立的 Spring 应用程序 直接 ...
- (八)React Ant Design Pro + .Net5 WebApi:后端环境搭建-Aop
一.Aop Aop 面向切面编程(Aspect Oriented Program),在项目中,很多地方都会用到Aop的概念,比如:过滤器(Filter),中间件(Middleware) 通常用来处理数 ...
- Docker-compose 搭建 Harbor私有仓库
一. 安装docker-compose 1. 下载docker-compose的最新版本 curl -L "https://github.com/docker/compose/release ...
- JVM基本概念
JVM基础概念 什么是JVM JVM:Java virtual machine,Java虚拟机,它是一种规范.是虚构出来的一台计算机.它可以将二进制字节码根据不同的操作系统转为当前操作系统识别的的字节 ...
- 生成树Toolkit
STP Toolkit 快速收敛: Port Fast 生成树安全: Root Guard BPDU Guard BPDU Filter Port Security 防环: Loop Guard Po ...
- python3 爬虫--Chrome以及 Chromedriver安装配置
1终端 将下载源加入到列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...
- TypeScript编译tsconfig.json配置
配置预览 { "include": ["src/**/*"], "exclude": ["ndoe_modules", ...
- 写出Hibernate中核心接口/类的名称,并描述他们各自的责任?
Hibernate的核心接口一共有5个,分别为:Session.SessionFactory.Transaction.Query和 Configuration.这5个核心接口在任何开发中都会用到.通过 ...
- 为什么等待和通知是在 Object 类而不是 Thread 中声明的?
一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢.Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试问题.为什么 wait,notify ...
- kafka端口和zookeeper端口
一.问题描述 今天配合现场联调一个数据工具,工具使用到了kafka,程序启动之后包如下错误: [WARN ] [2020-08-17 19:17:27] [org.apache.kafka.clien ...