Spring_bean的实例化时机
前言:创建Java对象
public class User {
private String name;
private Integer age; public User() {
System.out.println("这是空参构造");
} public String getName() {
return name;
} public Integer getAge() {
return age;
} public void setName(String name) {
this.name = name;
} public void setAge(Integer age) {
this.age = age;
}
}
1.默认情况--容器创建,容器管理的bean即被实例化
<!-- 创建方式1:空参构造创建 -->
<bean id="user" class="cn.rocker.spring.bean.User">
</bean>
public class Demo {
@Test
public void run(){
//1.创建容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
//2.从容器获取对象
//Object user = context.getBean("user", User.class);
//3.打印对象
//System.out.println(user);
}
}
2.给bean元素设置lazy-init="true"属性--调用getBean()方法时,bean被实例化,即对容器管理的bean进行请求时,才会实例化
<!-- 创建方式1:空参构造创建 -->
<bean id="user" class="cn.rocker.spring.bean.User" lazy-init="true">
</bean>
public class Demo {
@Test
public void run(){
//1.创建容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
//2.从容器获取对象
Object user = context.getBean("user", User.class);
//3.打印对象
//System.out.println(user);
}
}
3.给bean元素设置scope="singleton"属性(默认)--容器创建,容器管理的bean即被实例化,以后每次请求获得的都是相同对象
<!-- 创建方式1:空参构造创建 -->
<bean id="user" class="cn.rocker.spring.bean.User" scope="singleton">
</bean>
@Test
public void run4(){
//1.创建容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
//2.从容器获取对象
Object user1 = context.getBean("user", User.class);
Object user2 = context.getBean("user", User.class);
Object user3 = context.getBean("user", User.class);
//3.打印对象
//System.out.println(user1);
System.out.println(user2 == user3);
}
4.给bean元素设置scope="prototype"属性--调用getBean()方法时,bean被实例化,即对容器管理的bean进行请求时,才会实例化,而且每次请求都会获得新的对象
<!-- 创建方式1:空参构造创建 -->
<bean id="user" class="cn.rocker.spring.bean.User" scope="prototype">
</bean>
@Test
public void run5(){
//1.创建容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("cn\\rocker\\spring\\test\\spring-config.xml");
//2.从容器获取对象
Object user4 = context.getBean("user", User.class);
Object user5 = context.getBean("user", User.class);
Object user6 = context.getBean("user", User.class);
//3.打印对象
//System.out.println(user1);
System.out.println(user5 == user6);
}
总结:1.默认情况下,容器创建,bean即被实例化
2.当scope为singleton(默认)时,设置lazy-init="true",则会在请求对象时,对对象进行实例化
3.当scope为prototype时,则会在请求对象时,对对象进行实例化,且每次请求都会创建新的实例
Spring_bean的实例化时机的更多相关文章
- spring中bean实例化时机以及整个运转方式
接上一篇文章,一般在servlet获取到请求之后 在service方法中就可以完成所有的请求处理以及返回,但是我们会采用更高级的MVC框架来做.也就是说所有的MVC框架入口就是serlvet中的ser ...
- Webwork 学习之路【05】请求跳转前 xwork.xml 的读取
个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...
- C++模板知识小结
模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版. 由于类模板包含类型参数,因 ...
- Java中调用参数是数组的存储过程
Java中调用参数是数组的存储过程 1. 存储过程以及类型定义如下: --The array in oracle CREATE OR REPLACE TYPE idArray AS TABLE OF ...
- Servlet起步
什么是Servlet Servlet是sun公司制定的用来扩展web服务器功能的组件规范,通俗理解为遵循Servlet规范开发的实现了某个功能的Java组件.该组件没有 main 方法,不能独立地运行 ...
- JavaWeb三大组件之Servlet
http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Servlet.html 一.Servlet继承结构体系图 从结构图中 ...
- Spring基于纯注解方式的使用
经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...
- Webwork【05】请求跳转前 xwork.xml 的读取
个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...
- 二:Servlet
一:servlet开端 1.servlet是什么? a.就是一个java类 b.服务器端的小程序 c.处理用户请求 2.servlet的实现: a.实现Servlet接口 b.继承GenericSer ...
随机推荐
- linux内核分析实践二学习笔记
Linux实践二--内核模块的编译 标签(空格分隔): 20135328陈都 理解内核的作用 Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能 ...
- 在Java中执行Tomcat中startup.bat
问题:更改数据库时,需要重启Tomcat服务器,才能把更改后的数据加载到项目中.于是想每次更改数据库时,都调用Java方法,重启Tomcat 代码: Process process = Runtime ...
- 团队项目 NABCD分析java音乐播放器
NABCD分析java音乐播放器 程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中 ...
- 广商博客沖刺第一天(new ver):
項目名稱:廣商博客 沖刺二天傳送門 此次Sprint的目标:全部sprint任務完成 时间:1星期左右 每日立会 Daily Standup Meeting: 1#A3008 晚上8点开始,大概1小时 ...
- Sql语句报ORA-01795: 列表中的最大表达式数为 1000
错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...
- 『编程题全队』Beta 阶段冲刺博客四
1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.新增添加提醒事项的按钮 2.添加了新建提醒框 3.测试了新的SubTask思 ...
- Maven相关问题解决.docx
1. 问题 2. 原因 出现.lastUpdated结尾的文件的原因:由于网络原因没有将Maven的依赖下载完整,导致. 解决方案: 1.删除所有以.lastUpdate结尾的文件 a)1.切换到ma ...
- php的一些算法题
1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请编程输出两年内每个月的兔子总数为多少? <?php function getRes ...
- list1与list2求交集的方法总结!
一.有序集合求交集的方法有 a)二重for循环法,时间复杂度O(n*n) b)拉链法,时间复杂度O(n) c)水平分桶,多线程并行 d)bitmap,大大提高运算并行度,时间复杂度O(n) e)跳表, ...
- PHP IF ELSE简化/三元一次式的使用
一般我们会这样写: <? if($_GET['time']==null) { $time = time(); } else { $time = $_GET['time']; } echo $ti ...