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 ...
随机推荐
- Oracle系列(三): 情景查询一 a表中有个fid字段,逗号分隔开来,b表中有id字段及其他信息,如何关联a表的fid和和b表的id字段查询
现在有两个表,表a中 DOC FID 1 a,b,c 2 a,c,d 表b中 ID KEY a A b B c C d D 怎么联合查询出 DOC FID KEY 1 a,b,c A,B,C 2 a, ...
- Sonatype Nexus 2.11.1-01 使用入门
nexus安装与启动 linux下: 安装路径 /home/maven/nexus-2.11.1-01/ 启动方法 ./bin/nexus start windows下: 管理员模式运行cmd.exe ...
- [cnbeta]iPhone 2018年全球出货2.25亿部:中国区下滑两成
iPhone 2018年全球出货2.25亿部:中国区下滑两成 2019年01月22日 20:12 501 次阅读 稿源:快科技 0 条评论 https://www.cnbeta.com/artic ...
- Jquery :animate反复执行的动画可以利用函数的回调
<html><head><script type="text/javascript" src="/jquery/jquery.js" ...
- pandas创建一个日期
1.通过指定周期和频率,使用date.range()函数就可以创建日期序列. 默认情况下,范围的频率是天. 2.bdate_range()用来表示商业日期范围,不同于date_range(),它不包括 ...
- springMVC 使用WebApplicationContext获取ApplicationContext对象
主要用于从application中获取bean 1.applicationContext 在web.xml中使用listener配置 <context-param> <param-n ...
- python之列表操作(list)
# 列表操作功能汇总 print("列表操作功能汇总") list_demo = ['first', 'second', 'thrid', 'fourth'] # 复制list_d ...
- Freemarker空值判断
freemarker中显示某对象使用${name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: <#if name??> …… </#if& ...
- 嵌入式启动jetty
由于jetty8以上版本已经抛弃JDK1.6,公司统一开发JDK又一直不升级,所以我们使用jetty8 pom.xml <project xmlns="http://maven.apa ...
- linux ACL权限
利用这两个指令就可以了: getfacl:获取某個文件的 ACL 设置 setfacl:设置某個文件的 ACL 规范 [root@study ~]# setfacl [-bkRd] [{-m|-x} ...