




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring配置文件的根元素,包含一个或多个bean元素。 用于告诉Spring容器一个类以及它是如何配置的。 class属性:Java Bean 类名(全路经)。 id属性:Java Bean在BeanFactory中的唯一标识,代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称。 name属性:同上,如果给bean增加别名,可以通过name属性指定一个或多个id。 singleton属性:指定此Java Bean是否采用单例(Singleton)模式,如果设为“true”,则在BeanFactory作用范围内,只维护此Java Bean的一个实例,代码通过BeanFactory获得此Java Bean实例的引用。反之,如果设为“false”,则通过BeanFactory获取此Java Bean实例时,BeanFactory每次都将创建一个新的实例返回。 abstract属性:设定ApplicationContext是否对bean进行预先的初始化。 parent属性:定义一个模板。 autowire属性:bean自动装配模式。可选5种模式。no:不使用自动装配。Bean的引用必须通过ref元素定义。byName:通过属性名字进行自动装配。byType:如果BeanFactory中正好有一个同属性类型一样的bean,就自动装配这个属性。如果有多于一个这样的bean,就抛出一个致命异常,它指出你可能不能对那个bean使用byType的自动装配。如果没有匹配的bean,则什么都不会发生,属性不会被设置。如果这是你不想要的情况(什么都不发生),通过设置dependency-check=objects属性值来指定在这种情况下应该抛出错误。constructor:这个同byType类似,不过是应用于构造函数的参数。如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则一个致命的错误会产生。autodetect: 通过对bean 检查类的内部来选择constructor或byType。如果找到一个缺省的构造函数,那么就会应用byType。 dependency-check属性:依赖检查模式。可选四种。 none :不进行依赖检查。没有指定值的bean属性仅仅是没有设值。Simple:对基本类型和集合(除了合作者外,比如其他的bean,所有东西)进行依赖检查。Object:对合作者进行依赖检查。all :对合作者,基本类型和集合都进行依赖检查。 lazy-init属性:延迟加载。True 或False 。 init-method属性:初始化方法,此方法将在BeanFactory创建JavaBean实例之后,在向应用层返回引用之前执行。一般用于一些资源的初始化工作。 destroy-method属性:销毁方法。此方法将在BeanFactory销毁的时候执行,一般用于资源释放。 factory-bean属性:通过实例工厂方法创建bean,class属性必须为空,factory-bean属性必须指定一个bean的名字,这个bean一定要在当前的bean工厂或者父bean工厂中,并包含工厂方法。而工厂方法本身通过factory-method属性设置。 factory-method属性:设定工厂类的工厂方法。 depends-on属性:Bean依赖关系。一般情况下无需设定。Spring会根据情况组织各个依赖关系的构建工作。只有某些特殊情况下,如JavaBean中的某些静态变量需要进行初始化(这是一种BadSmell,应该在设计上应该避免)。通过depends-on指定其依赖关系可保证在此Bean加载之前,首先对depends-on所指定的资源进行加载。 用于设置一个属性。name属性: 属性的名称。 指定bean的属性值。 指定了属性对BeanFactory中其他Bean的引用关系。bean=属性:指定了属性对BeanFactory中其他Bean的引用关系。local属性:local=属性: 指定了属性对BeanFactory中其他Bean的引用关系。(仅在本地(同一个)xml文件里寻找bean。parent属性:指定了属性对BeanFactory中其他Bean模板的引用关系。 指定bean的属性类型为List的属性值。 指定bean的属性类型为List的属性值。 指定bean的属性类型为List的属性值。 指定bean的属性类型为Properties的属性值。 key属性:指定Properties的键 用来设置属性值为容器中其他bean的id 或name。 指定一个空值。 使用构造方法注入,指定构造方法的参数。 index属性:设置参数的序号。ref属性:同reftype属性:参数类型。value属性:参数的值。 lookup方法注入 bean属性:要注入的bean名name属性:要注入的方法名称 用来把已存在的方法实现替换为其他的实现。name属性:要替换的方法名replacer属性:替换者类, 实现org.springframework.beans.factory.support.MethodReplacer接口) 方法返回的类型 引用:使用index属性除了可以解决多个简单类型构造参数造成的模棱两可的问题之外,还可以用来解决两个构造参数类型相同造成的麻烦。注意:index属性值从0开始。 以上的两种构造器注入一种用的类型,一种用的索引引用其他Bean这里有三种引用的方法, 很少使用经过试验证明 这种方法只有在当前的Xml文件中才能起到作用,使用引用标记不能起作用,会抛出异常。.1集合合并 supportsomecompany.co.uk 在上面的例子中,childbean的adminEmails属性的元素上使用了merge=true属性。当child bean被容器实际解析及实例化时,其 adminEmails将与父集合的adminEmails属性进行合并。最终:administrator= sales= support=supportsomecompany.co.uk.2.强类型集合(仅适用于Java5+)public class Foo private Map accounts; public void setAccounts(Map accounts) this.accounts = accounts; 在foobean的accounts属性被注入之前,通过反射,利用强类型Map的泛型信息,Spring的底层类型转换机制将会把各种value元素值转换为Float类型,因此字符串9.99、2.75及3.99就会被转换为实际的Float类型。.Nulls 上述的配置等同于Java代码:exampleBean.setEmail(null)。.XML-based configuration metadata shortcuts(Xml的简写)注意,尽管存在等同于 元素的简写形式,但并没有的简写形式,为了对当前xml中bean的引用,你只能使用完整的形式。 等同于:.组合属性名称当设置bean的组合属性时,除了最后一个属性外,只要其他属性值不为null,组合或嵌套属性名是完全合法的。例如,下面bean的定义: foo bean有个fred属性,此属性有个 bob属性,而bob属性又有个sammy属性,最后把sammy属性设置为123。为了让此定义能工作, foo的fred属性及fred 的bob属性在bean被构造后都必须非空,否则将抛出NullPointerException异常。3.3.4.使用depends-on(强制初始化)若需要表达对多个bean的依赖,可以在depends-on中将指定的多个bean名字用分隔符进行分隔,分隔符可以是逗号、空格及分号等。下面的例子中使用了depends-on来表达对多个bean的依赖。 3.3.5.延迟初始化beanApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。一个延迟初始化bean将告诉IoC 容器是在启动时还是在第一次被用到时实例化。在XML配置文件中,延迟初始化将通过元素中的lazy-init属性来进行控制。 这样当一个bean需要使用到这个bean的时候才会初始化这个bean3.3.6.自动装配(autowire)协作者表3.2.Autowiring modes模式说明no不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。byName根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(.)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。byType如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check=objects让Spring抛出异常。constructor与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。autodetect通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。引用开发手册原文:理解自动装配的优缺点是很重要的。其中优点包括: 自动装配能显著减少配置的数量。不过,采用bean模板(见这里)也可以达到同样的目的。 自动装配可以使配置与java代码同步更新。例如,如果你需要给一个java类增加一个依赖,那么该依赖将被自动实现而不需要修改配置。因此强烈推荐在开发过程中采用自动装配,而在系统趋于稳定的时候改为显式装配的方式。自动装配的一些缺点: 尽管自动装配比显式装配更神奇,但是,正如上面所提到的,Spring会尽量避免在装配不明确的时候进行猜测,因为装配不明确可能出现难以预料的结果,而且Spring所管理的对象之间的关联关系也不再能清晰的进行文档化。 对于那些根据Spring配置文件生成文档的工具来说,自动装配将会使这些工具没法生成依赖信息。 如果采用by type方式自动装配,那么容器中类型与自动装配bean的属性或者构造函数参数类型一致的bean只能有一个,如果配置可能存在多个这样的bean,那么就要考虑采用显式装配了。尽管使用autowire没有对错之分,但是能在一个项目中保持一定程度的一致性是最好的做法。例如,通常情况下如果没有使用自动装配,那么仅自动装配一个或两个bean定义可能会引起开发者的混淆。3.4.bean的作用域3.4.1.Singleton作用域当把一个bean定义设置为singlton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。3.4.2.Prototype作用域Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。简单地说,如果你用singleton属性那么就必须在那个文件里引用spring-beans.dtd DTD。 如果你用scope属性那么必须 在那个文件里引用spring-beans-2.0.dtd DTD 或spring-beans-2.0.xsd XSD。今天就看到这里,也许在将来的几天中我会将这个学习笔记作为我的工作日志,里面会写上一些关于Hibernate的学习笔记针对每次HTTP请求,Spring容器会根据loginAction bean定义创建一个全新的LoginAction bean实例,且该loginAction bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据loginAction bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request作用域的bean实例将被销毁。针对某个HTTP Session,Spring容器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南昆明市妇幼保健院见习人员招聘45人备考考试题库附答案解析
- 安远县城投集团2025年公开招聘工作人员考试参考题库及答案解析
- 山块转让股份买卖合同
- 住宅物业租用与物业服务合同
- 2025年大庆林甸县招聘公益性岗位人员22人考试参考题库及答案解析
- 农业生态循环农业项目实施合同
- 除夕跳火群高分作文(15篇)
- 快递收发自动化软件合作协议
- 家装合同模板与常见条款解析
- 基于需求的报告制作指南
- 2025年工会财务知识竞赛考试题库及参考答案
- 《城市轨道交通初期运营客流预测要求》编制说明
- 人工智能训练师基础技能培训手册
- GB/T 13925-2025铸造高锰钢金相检验
- 激光SLAM中的动态物体剔除算法研究及其性能评估
- 部编五年级上册道德法治教学质量提升计划
- 血压监测技术课件教学
- 超声在肾结石中的诊断
- 肺恶性肿瘤死亡病例讨论
- 胸痛中心优化救治流程对急性STEMI患者救治效率及临床预后的影响
- JJG 667-2025 液体容积式流量计检定规程
评论
0/150
提交评论