- 浏览: 1572109 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
目录
1.spring 实例化 bean 的几种方式
2.spring 中bean 的作用域
3.spring 管理的bean 在什么时候初始化 和 销毁
4.spring bean 的 init-method destroy-method
1.下面 我们来看看spring的 实例化bean的 几种方式
1.使用类构造器实例化bean
2 使用 静态工厂方法来实例化
3. 使用 实例工厂方式来实例化bean
//测试
2.弄了这么多 那么spring 中每次 getBean();这个方法返回的对象 是同一个吗??
//以上 说明 是同一个对象 ,说明了spring 默认 的bean 是 单例模式 Singleton
spring bean 的作用域 scope
Singleton
prototype:每次从容器获取的bean 都是一个新的对象. (原型)
//对于 web 应用来说
request
session
global session
//修改spring 配置 来测试
//说明 设置 scope="prototype" 后变成了 原型 每次 获取都是不同的对象
3.看看 spring 在什么时候 初始化bean (在 配置 的bean对应的类中 加个 构造方法 就可以测试了)
1 先测试 singleton 范围
// 发现 打印 出了 "我被实例化了!" 说明 spring 默认情况下 是加载 spring配置文件的时候就初始化了 bean
2.在来测试 scope="prototype"
// 发现 打印出 "开始调用 getBean方法" 之后 才打印出 "我被实例化了!" "我被实例化了!"
// 说明 scope="prototype" 是在 getBean方法后 才被实例化
3.再来看延迟初始化 lazy-init="true";
// 发现 打印出 "开始调用 getBean方法" 之后 才打印出 "我被实例化了!"
说明 lazy-init="true" 也是在 getBean方法后才被初始化 但是 使用的是同一个对象 所以 只打印出了一句 "我被实例化了!" .而scope="prototype" 是原型 所以 打印出了 两句 "我被实例化了!" .
4.如果 我们想在 spring 初始化bean实例后 执行一个方法 , 或者 在 bean销毁后 执行一个方法 (比如 资源的打开 和 使用完后 资源的关闭:写到这 大家是不是 就想到了 打开数据库连接 和 关闭呀)
使用 这两个属性 init-method , destroy-method
// 发现 init 和 destroy 方法 都执行了
1.spring 实例化 bean 的几种方式
2.spring 中bean 的作用域
3.spring 管理的bean 在什么时候初始化 和 销毁
4.spring bean 的 init-method destroy-method
1.下面 我们来看看spring的 实例化bean的 几种方式
1.使用类构造器实例化bean
<!--1.使用类构造器实例化bean---> <bean id="personService" class="com.person.service.impl.PersonServiceBean"> </bean>
2 使用 静态工厂方法来实例化
<!-- 2.使用 静态工厂方法来实例化 bean --> <bean id="personService2" class="com.person.service.impl.PerssonServiceFactory" factory-method="createPersonService"/>
package com.person.service.impl; import com.person.service.PersonService; public class PerssonServiceFactory { //使用这个工厂中的静态方法 public static PersonService createPersonService(){ return new PersonServiceBean(); } }
3. 使用 实例工厂方式来实例化bean
<!-- 使用 实例工厂方式来实例化bean --> <bean id="perssonServiceFactory" class="com.person.service.impl.PerssonServiceFactory"/> <bean id="personService3" factory-bean="perssonServiceFactory" factory-method="createPersonService2"/>
package com.person.service.impl; import com.person.service.PersonService; public class PerssonServiceFactory { //使用 静态工厂方法来实例化 bean public static PersonService createPersonService(){ return new PersonServiceBean(); } //使用 实例工厂方式来实例化bean public PersonService createPersonService2(){ return new PersonServiceBean(); } }
//测试
@Test public void init3(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); //方法一 获取服务层对象 PersonService personService=(PersonService)ctx.getBean("personService2"); //方法二 PersonService personService1=ctx.getBean("personService3",PersonService.class); personService.save(); personService1.save(); }
2.弄了这么多 那么spring 中每次 getBean();这个方法返回的对象 是同一个吗??
@Test //测试 spring 容器中的 bean 的作用域 public void init4(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); //方法一 获取服务层对象 PersonService personService=(PersonService)ctx.getBean("personService"); PersonService personService1=(PersonService)ctx.getBean("personService"); //方法二 PersonService personService2=ctx.getBean("personService",PersonService.class); System.out.println(personService==personService1); //true System.out.println(personService1==personService2); //true }
//以上 说明 是同一个对象 ,说明了spring 默认 的bean 是 单例模式 Singleton
spring bean 的作用域 scope
Singleton
在每个Spring IOC容器中一个bean的定义只有一个对象实例,默认情况下,会在容器服务器启动时初始化bean,但我们可以制定Bean 节点 lazy-init="true" 来延迟初始化bean,这个时候,只有第一个获取bean才会初始化bean.如: <bean id="XXX" class="com.person.serivce.impl.PersonServiceBean" lazy-init="true"/> 如果 相对 spring文件中的所有bean 都 延迟初始化,可以在根节点beans 设置 default-lazy-init="true" 如下: <beans default-init="true"/>
prototype:每次从容器获取的bean 都是一个新的对象. (原型)
//对于 web 应用来说
request
session
global session
//修改spring 配置 来测试
<!-- 使用 静态工厂方法来实例化 bean 加入 scope 范围--> <bean id="personService2" class="com.person.service.impl.PerssonServiceFactory" factory-method="createPersonService" scope="prototype"/>
@Test //测试 spring 容器中的 bean 的作用域 public void init5(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); //方法一 获取服务层对象 PersonService personService=(PersonService)ctx.getBean("personService2"); PersonService personService1=(PersonService)ctx.getBean("personService2"); //方法二 PersonService personService2=ctx.getBean("personService2",PersonService.class); System.out.println(personService==personService1); //false System.out.println(personService1==personService2); //false }
//说明 设置 scope="prototype" 后变成了 原型 每次 获取都是不同的对象
3.看看 spring 在什么时候 初始化bean (在 配置 的bean对应的类中 加个 构造方法 就可以测试了)
1 先测试 singleton 范围
package com.person.service.impl; import com.person.service.PersonService; public class PersonServiceBean implements PersonService { //测试 spring 在什么时候初始化 bean public PersonServiceBean() { System.out.println("我被实例化了!"); } public void save(){ System.out.println("我就是save方法!"); } }
@Test //测试 spring的 初始化 public void init(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); }
// 发现 打印 出了 "我被实例化了!" 说明 spring 默认情况下 是加载 spring配置文件的时候就初始化了 bean
2.在来测试 scope="prototype"
@Test //测试 spring的 初始化 public void init(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); System.out.println("开始调用 getBean方法"); //方法一 获取服务层对象 PersonService personService=(PersonService)ctx.getBean("personService"); //方法二 PersonService personService1=ctx.getBean("personService",PersonService.class); //personService.save(); //personService1.save(); }
// 发现 打印出 "开始调用 getBean方法" 之后 才打印出 "我被实例化了!" "我被实例化了!"
// 说明 scope="prototype" 是在 getBean方法后 才被实例化
3.再来看延迟初始化 lazy-init="true";
<!-- 使用 延迟初始化 --> <bean id="personService" class="com.person.service.impl.PersonServiceBean" lazy-init="true"> </bean>
@Test //测试 spring的 初始化 public void init(){ ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); System.out.println("开始调用 getBean方法"); //方法一 获取服务层对象 PersonService personService=(PersonService)ctx.getBean("personService"); //方法二 PersonService personService1=ctx.getBean("personService",PersonService.class); //personService.save(); //personService1.save(); }
// 发现 打印出 "开始调用 getBean方法" 之后 才打印出 "我被实例化了!"
说明 lazy-init="true" 也是在 getBean方法后才被初始化 但是 使用的是同一个对象 所以 只打印出了一句 "我被实例化了!" .而scope="prototype" 是原型 所以 打印出了 两句 "我被实例化了!" .
4.如果 我们想在 spring 初始化bean实例后 执行一个方法 , 或者 在 bean销毁后 执行一个方法 (比如 资源的打开 和 使用完后 资源的关闭:写到这 大家是不是 就想到了 打开数据库连接 和 关闭呀)
package com.person.service.impl; import com.person.service.PersonService; public class PersonServiceBean implements PersonService { //初始化后 执行的方法 public void init(){ System.out.println("打开数据库的连接"); } //销毁后执行的方法 public void destroy(){ System.out.println("关闭 数据的连接资源"); } //测试 spring 在什么时候初始化 bean public PersonServiceBean() { System.out.println("我被实例化了!"); } public void save(){ System.out.println("我就是save方法!"); } }
使用 这两个属性 init-method , destroy-method
<!-- 使用个 实例工厂方式来实例化bean --> <bean id="perssonServiceFactory" class="com.person.service.impl.PerssonServiceFactory"/> <bean id="personService3" factory-bean="perssonServiceFactory" factory-method="createPersonService2" init-method="init" destroy-method="destroy"/>
@Test //测试 spring 的 init-method , destroy-method public void init6(){ //注意这里 ApplicationContext 接口 没有 close 方法 只有 用 父接口 AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); //方法二 PersonService personService1=ctx.getBean("personService3",PersonService.class); personService1.save(); ctx.close(); }
// 发现 init 和 destroy 方法 都执行了
发表评论
-
spring-session 中的坑
2017-07-06 15:34 9943spring-session 配置 依赖 gradle ... -
Spring AspectJ Aop Annotation
2017-03-29 17:08 663import org.aspectj.lang.Proce ... -
spring 第13天 使用@scheduled注解执行定时任务
2015-01-06 23:11 54014我们使用spring的注解 @Scheduled 执行定时任务 ... -
Spring 第12天,事务传播属性和 隔离级别
2014-09-28 00:36 7721 事务的传播属性(Propagation) 1) REQ ... -
spring 第11天 quartz任务调度
2014-08-24 13:59 1098Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
spring 第10 天 AOP 面向切面
2014-08-21 00:08 1716AOP(Aspect Orient Programming ... -
spring 第9天 Resurce 资源访问
2014-08-17 22:20 1823Spring Resource接口 spring提供的Reso ... -
spring 第8天 Spring 注解
2014-08-17 15:33 1433spring注解 @Component:标注一个普通的sp ... -
spring 第7天 Bean,BeanFactory处理器,配置器
2014-08-16 21:46 1183spring 两种后处理器 第一种,Bean 后处理器 对容器 ... -
spring 第6天SpEL,P命名空间,Util Schema
2014-08-13 22:52 1264使用p名称空间配置属性 ... -
spring 第5天不同作用域的bean,注入Field,方法返回值
2014-08-11 22:31 2060协调作用域不同步的bean 问题是;当一个singleton的 ... -
spring 第4天bean继承,init,destory-method
2014-08-10 17:54 1599深入理解Spring容器中的b ... -
spring 第3天使用java类和XML配置bean
2014-08-09 16:51 1458下面采用java类来配置bean,前面都采用xml进行配置be ... -
spring 第2天,bean作用域,自动注入集合
2014-08-06 22:16 1883sping容器中的Bean <!---beans的全 ... -
spring 第1天 IOC,DI,国际化,容器事件
2014-08-04 21:27 13561.构造注入(就是使用 构 ... -
SpringMVC 注解 和非注解
2014-01-26 10:29 17974首先看看非注解的项目结构 在web.xml文件 配置spr ... -
详解spring 每个jar的作用
2013-11-19 23:54 3869spring.jar 是包含有完整 ... -
Spring配置Hibernate事务
2013-11-10 13:45 1175为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事 ... -
Spring 中引用Properties文件
2013-08-29 14:39 10607其中部分配置信息(邮件发送相关): #邮件发送的相关配置 ... -
Spring IOC控制反转 依赖注入DI
2012-12-15 09:37 2293目录 1.使用IOC控制反转 中的DI依赖注入 手工注入 ...
相关推荐
Spring bean 管理大全 全面的介绍springbean各种操作原理
主要介绍了Spring Bean管理注解方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
SpringBean的生命周期.mdj
Spring中关于Bean的管理的课件,可以在讲课的时候用它。
的配置,通过利用应用程序上下文XML文件来管理bean依赖性。此文件处于应用程序的外部,包含bean 及其与该应用程序的依赖项的定义。尽管使用XML配置较为简单和便捷,但仍有另外一种方法可定义bean
bean加入spring容器管理的方式,bean加入applicationcontext容器的方式
spring自动扫描和管理Bean的示例
初始化后可访问Spring管理的Bean
spring管理bean应用实例代码;spring管理bean应用实例代码
使用了dom4j相关包,spring通过反射机制实现bean的创建等,完成bean的管理
JavaEE spring半自动bean管理事务案例
1.spring中bean实例化的俩种方式 ...3.spring中的bean管理 4.spring中不同类型bean的作用域 5.spring中bean的生命周期 通过我的项目,可以跟着学习SPringIoC容器和Bean管理,帮助你快速上手SSM框架
这个是搭建与测试Spring的开发环境和编码剖析Spring 管理Bean的原理的代码,适合刚接触spring的人学习,如何搭建spring开发环境,以及了解spring是如何管理bean的。这个是由传智播客的老师讲的。
在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息,在大数据采集项目中用到的,已经测试过了
NULL 博文链接:https://coolszy.iteye.com/blog/519448
代码及ppt涵盖 Spring4.0 的所有核心内容:在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的...
03_黑马程序员_黎活明_Spring2.5视频教程_编码剖析Spring管理Bean的原理
Spring管理的Bean的生命周期
本文主要介绍 Spring IoC 容器如何管理 Bean 的生命周期。 在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对...
主要介绍了Spring Bean基本管理,以实例形式较为详细的分析了Spring Bean的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下