本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9694438
建立时间:2004年12月20日




[java语言]spring技术手册阅读笔记(二) spring bean的使用
原创空间,  软件技术

邢红瑞 发表于 2006/8/6 13:50:06

Spring的依赖注入容器的核心是Bean工厂。Bean工厂负责管理组件和它们之间的依赖关系。一般说来,你的beans应该遵守JavaBeans规范,但是这不是必须的,如果使用构造器依赖注入来连接的beans的时候,就没有遵守beans规范(beans规范中的javabean构造函数没有参数)。一个BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 这个接口有多个实现。 最常使用的的简单的beanFactory实现是org.springframework.beans.factory.xml.XmlBeanFactory。如果通过配置文件来完成配置,在内部是通过实现了BeanDefinition接口的类的实例来表现的。Bean的配置不仅存储着关于bean自己的信息,同时还有其依赖的beans的信息。对于任何实现了beanDefinitionRegistry接口的BeanFactory类,从配置文件中读取Bean定义(BeanDefinition)数据,既可以通过PropertiesBeanDefinitionReader(基于.properties文件)也可以通过XMLBeanDefinitionReader(基于XML文件)。XmlBeanFactory派生于DefaultListableBanFactory并且简单的扩展了它,使它能够通过XmlBeanDefinitionReader自动获取配置信息。用户不需要实例化BeanFactory, 因为Spring框架代码会做这件事。一个XmlBeanFactory中的Bean定义包括的内容有: classname:这通常是bean的真正的实现类。但是如果一个bean使用一个静态工厂方法所创建而不是被普通的构造函数创建,那么这实际上就是工厂类的classname bean行为配置元素:它声明这个bean在容器的行为方式(比如prototype或singleton,自动装配模式,依赖检查模式,初始化和析构方法)。 BeanFactory调用某个类的静态的工厂方法来创建bean, class属性指定了实际包含静态工厂方法的那个类。有以下3个途径创建bean:1.通过构造函数创建bean2.通过静态工厂方法创建Bean3.通过实例工厂方法创建bean每一个bean都有一个或多个id(也叫作标志符,或名字;这些名词说的是一回事)。这些id在管理bean的BeanFactory或ApplicationContext中必须是唯一的。 一个bean一般只有一个id,但是如果一个bean有超过一个的id,那么另外的可以认为是别名。 Beans被定义为两种部署模式中的一种:singleton或prototype。如果一个bean是singleton形态的,那么就只有一个共享的实例存在, 所有和这个bean定义的id符合的bean请求都会返回这个唯一的、特定的实例。 如果bean以non-singleton,prototype模式部署的话,对这个bean的每次请求都会创建一个新的bean实例。这对于例如每个user需要一个独立的user对象这样的情况是非常理想的。 Beans默认被部署为singleton模式,除非你指定。要记住把部署模式变为non-singletion(prototype)后,每一次对这个bean的请求都会导致一个新创建的bean,而这可能并不是你真正想要的。所以仅仅在绝对需要的时候才把模式改成prototype。(我仅在ThrowawayController时使用过singleton="false)反向控制/依赖注射存在两种主要的形式:1.基于setter的依赖注射,是在调用无参的构造函数或无参的静态工厂方法实例化你的bean之后, 通过调用你的bean上的setter方法实现的。 在BeanFactory中定义的使用基于setter方法的注射依赖的bean是真正的JavaBean。 Spring一般提倡使用基于setter方法的依赖注射,因为很多的构造函数参数将会是笨重的, 尤其在有些属性是可选的情况下。 2.基于构造函数的依赖注射,它是通过调用带有许多参数的构造方法实现的, 每个参数表示一个合作者或者属性。  虽然Spring一般提倡在大多数情况下使用基于setter的依赖注射, 但是Spring还是完全支持基于构造函数的依赖注射, 因为你可能想要在那些只提供多参数构造函数并且没有setter方法的遗留的bean上使用Spring。 另外对于比较简单的bean,使用构造函数方法以确保bean不会处于错误的状态。  


阅读全文(6942) | 回复(3) | 编辑 | 精华
 


回复:spring技术手册阅读笔记(二) spring bean的使用
原创空间,  软件技术

lsamsony(游客)发表评论于2006/8/29 17:34:26

至于singleton=false,很多是利用introduction实现多重继承而使用prototype,你msn换了也不通知一声,太不够意思了吧。


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:spring技术手册阅读笔记(二) spring bean的使用
原创空间,  软件技术

tom(游客)发表评论于2006/8/8 18:24:37

大哥,能不能举个例子什末的

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.117 second(s), page refreshed 144757446 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号