前言:创建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的实例化时机的更多相关文章

  1. spring中bean实例化时机以及整个运转方式

    接上一篇文章,一般在servlet获取到请求之后 在service方法中就可以完成所有的请求处理以及返回,但是我们会采用更高级的MVC框架来做.也就是说所有的MVC框架入口就是serlvet中的ser ...

  2. Webwork 学习之路【05】请求跳转前 xwork.xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

  3. C++模板知识小结

    模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版. 由于类模板包含类型参数,因 ...

  4. Java中调用参数是数组的存储过程

    Java中调用参数是数组的存储过程 1. 存储过程以及类型定义如下: --The array in oracle CREATE OR REPLACE TYPE idArray AS TABLE OF ...

  5. Servlet起步

    什么是Servlet Servlet是sun公司制定的用来扩展web服务器功能的组件规范,通俗理解为遵循Servlet规范开发的实现了某个功能的Java组件.该组件没有 main 方法,不能独立地运行 ...

  6. JavaWeb三大组件之Servlet

    http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Servlet.html 一.Servlet继承结构体系图 从结构图中 ...

  7. Spring基于纯注解方式的使用

    经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...

  8. Webwork【05】请求跳转前 xwork.xml 的读取

    个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...

  9. 二:Servlet

    一:servlet开端 1.servlet是什么? a.就是一个java类 b.服务器端的小程序 c.处理用户请求 2.servlet的实现: a.实现Servlet接口 b.继承GenericSer ...

随机推荐

  1. linux内核分析实践二学习笔记

    Linux实践二--内核模块的编译 标签(空格分隔): 20135328陈都 理解内核的作用 Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能 ...

  2. 在Java中执行Tomcat中startup.bat

    问题:更改数据库时,需要重启Tomcat服务器,才能把更改后的数据加载到项目中.于是想每次更改数据库时,都调用Java方法,重启Tomcat 代码: Process process = Runtime ...

  3. 团队项目 NABCD分析java音乐播放器

    NABCD分析java音乐播放器 程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中 ...

  4. 广商博客沖刺第一天(new ver):

    項目名稱:廣商博客 沖刺二天傳送門 此次Sprint的目标:全部sprint任務完成 时间:1星期左右 每日立会 Daily Standup Meeting: 1#A3008 晚上8点开始,大概1小时 ...

  5. Sql语句报ORA-01795: 列表中的最大表达式数为 1000

    错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...

  6. 『编程题全队』Beta 阶段冲刺博客四

    1.提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID) (1) 昨天已完成的工作 孙志威: 1.新增添加提醒事项的按钮 2.添加了新建提醒框 3.测试了新的SubTask思 ...

  7. Maven相关问题解决.docx

    1. 问题 2. 原因 出现.lastUpdated结尾的文件的原因:由于网络原因没有将Maven的依赖下载完整,导致. 解决方案: 1.删除所有以.lastUpdate结尾的文件 a)1.切换到ma ...

  8. php的一些算法题

    1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请编程输出两年内每个月的兔子总数为多少? <?php function getRes ...

  9. list1与list2求交集的方法总结!

    一.有序集合求交集的方法有 a)二重for循环法,时间复杂度O(n*n) b)拉链法,时间复杂度O(n) c)水平分桶,多线程并行 d)bitmap,大大提高运算并行度,时间复杂度O(n) e)跳表, ...

  10. PHP IF ELSE简化/三元一次式的使用

    一般我们会这样写: <? if($_GET['time']==null) { $time = time(); } else { $time = $_GET['time']; } echo $ti ...