前言:创建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内核学习总结

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...

  2. scipy的一些函数名

    rvs:随机变量pdf:概率密度函数cdf:累计分布函数sf:残存函数(1-CDF)ppf:分位点函数(CDF的逆)isf:逆残存函数(sf的逆)stats:返回均值,方差,(费舍尔)偏态,(费舍尔) ...

  3. Machine Learning Based Proactive Flow Entry Deletion for OpenFlow

    来源:IEEE 2018 作者:Hemin Yang and George F.Riley 摘要: 流表容量有限,因此高效管理流表至关重要.本文重点讨论了OpenFlow中定义的一种流表管理机制,即能 ...

  4. Debian中APT的前世今生

    https://baike.baidu.com/item/apt-get/2360755 https://www.debian.org/doc/manuals/debian-handbook/sect ...

  5. MySql连接空闲8小时自动断开引起的问题

    一.问题描述 ​ 最近遇到了一个奇怪的MySql数据库问题,好几次前一天晚上历史数据还正常存储,第二天早上来了看实时数据存储还正常,历史数据不存储了.找了好久也没找到问题.后来仔细想了想,历史数据设置 ...

  6. 小项目分析之C++ 实现模拟银行排队

      一.问题定义与分析 问题定义 •要解决的问题——银行一天之内的: 1.总客户数 2.客户总逗留时间 3.客户平均逗留时间 问题分析 •新来的人找个短的队伍,站在队尾开始排队 •排在队头的人可以办理 ...

  7. 周刷题第一期总结(two sum and two numbers)

    由于深深的知道自己是事件驱动型的人,一直想补强自己的薄弱环节算法,却完全不知道从哪里入手.所以只能采用最笨的办法,刷题.从刷题中遇到问题就解决问题,最后可能多多少少也能提高一下自己的渣算法吧. 暂时的 ...

  8. MySQL在Read Uncommitted级别下写操作加X锁

    很多文章认为MySQL在读未提交(Read Uncommitted)的隔离级别下,写操作是不加锁的,然而实际上并不是,在RU级别下,写操作加有X锁. 实践出真知 以前,我也认为RU隔离级别下,写操作不 ...

  9. HTML-封装原生Ajax

    function ajax(data){ //data{data:"",dataType:"xml/json",type:"get/post" ...

  10. IDEA在debug时修改变量值

    IDEA在debug调试时修改变量值 例如以下代码: int y1 = 0; anchor.setDy1(y1); 在代码中,这个y1永远是0,但是y1本身是个变量 debug的时候获取到这个属性,并 ...