版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级依赖配置与SpEL讲师:李刚本次要点PropertyPathFactoryFieldRetrievingFactoryBeanMethodInvokingFactoryBeanSpring提供的Schema简化配置Spring3.0提供的SpELSpring框架本质在Spring配置文件中使用XML元素进行配置,实际上驱动Spring执行相应的代码。例如:使用<bean.../>元素:驱动Spring执行无参数构造器、或有参数的构造器。还可驱动通过工厂方法创建Bean。使用<property.../>元素:驱动Spring执行setter方法。Java程序还可能有其他类型的语句:调用getter方法、调用普通方法、访问类或对象的Field,而Spring也为这种语句提供了对应的配置语法:调用getter方法:使用PropertyPathFactoryBean。访问类或对象的Field值:使用FieldRetrievingFactoryBean。调用普通方法:使用MethodInvokingFactoryBean。Spring框架本质是什么?它可以让开发者无需书写Java代码就可进行Java编程,当开发者采用合适的XML配置进行配置之后,Spring就可通过反射在底层执行任意的Java代码。调用其他Bean的getter方法如果想将另一个类的属性值的注入,可使用PropertyPathFactoryBean工厂类。如:<propertyname="age"> <beanid="person.son.age"class= "org.springframework.beans.factory.config.PropertyPathFactoryBean"/></property>PropertyPathFactoryBean的作用是调用指定Bean的getter方法PropertyPathFactory的说明PropertyPathFactory的本质就是以声明式方式来调用getter方法。例如:<beanid="theAge"class= "org.springframework.beans.factory.config.PropertyPathFactoryBean"> <propertyname="targetBeanName"value="person"/> <propertyname="propertyPath"value="son.age"/></bean>上面配置文件的实质相当于执行如下代码:theAge=person.getSon().getAge();获取类或Bean的Field值通过FieldRetrievingFactoryBean类,可以将指定类或Bean的field值作为属性值注入。FieldRetrievingFactoryBean用来获得目标类的静态Field,或者目标Bean的实例Field。获得的值可注入给其他Bean,也可直接定义成新的Bean。FieldRetrievingFactoryBean使用FieldRetrievingFactoryBean获取Field值时,必须指定如下两个属性值:targetClass或targetObject:分别用于指定Field值所在的目标类或目标对象,如果需要获得Field是静态Field,则使用targetClass指定目标类;否则使用targetObject指定目标对象。targetField:用于指定目标Field的Field名。FieldRetrievingFactoryBeanFieldRetrievingFactoryBean的本质就是以声明式方式来获取Field值方法。例如:<beanid="theAge3"class= "org.springframework.beans.factory.config.FieldRetrievingFactoryBean"> <propertyname="targetClass"value="java.sql.Connection"/> <propertyname="targetField"value="TRANSACTION_SERIALIZABLE"/></bean>上面配置相当于执行如下代码:theAge3=java.sql.Connection.TRANSACTION_SERIALIZABLE获取方法返回值通过MethodInvokingFactoryBean工厂Bean,可将指定方法返回值注入成目标Bean的属性值,MethodInvokingFactoryBean用来获得指定方法的返回值,该方法既可以是静态方法,也可以是实例方法。获得的方法返回值既然可被注入到指定Bean实例的指定属性,也可以直接定义成Bean实例。获取Bean实例的方法返回值当需要获取Bean的实例方法返回值时,需要指定如下三个属性:targetObject:确定目标Bean,该Bean可以是容器中已有的Bean,也可是嵌套Bean。targetMethod:确定目标方法,确定获取目标Bean哪个方法的返回值。arguments:确定调用方法的参数值。获取静态方法返回值如果需要获取静态方法的返回值,则无需指定targetObject,但需要指定目标class,指定目标class的属性通过targetClass属性。使用静态方法注入,需指定如下三个属性:targetClass:确定目标class。targetMethod:确定目标方法,确定获取目标class哪个方法的返回值。arguments:确定调用方法的参数值。MethodInvokingFactoryBeanMethodInvokingFactoryBean的本质就是以声明式方式来调用任何方法。例如:<beanid="sysProps"class= "org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <propertyname="targetClass"value="java.lang.System"/> <propertyname="targetMethod"value="getProperties"/></bean>上面配置相当于执行如下代码:sysProps=java.lang.System.getProperties();强制性初始化Bean配置Depends-on属性可以强制实例化属性Bean。如:<beanname=“name”/><beanname=“person”depends-on=“name”> <propertyname=“name”> <reflocal=“name”/> </property></bean>基于Schema的简化配置由于Spring框架专注于使用XML配置来驱动Java代码。因此Spring配置文件往往很庞大,Spring框架则一直致力于配置文件的“瘦身”,其中提供例如两个命名空间的简化配置:使用p命名空间。使用util命名空间。使用p命名空间<beanid="chinese"class="org.crazyit.app.service.impl.Chinese"
p:age="29"p:axe-ref="stoneAxe"/>使用util命名空间constant:该标签用于将指定类的静态Field暴露成一个Bean实例。它是FieldRetrievingFactoryBean的简化配置。property-path:该标签用于将指定Bean实例的指定属性(即getter方法返回值)暴露成一个Bean实例。它是PropertyPathFactoryBean的简化配置。list:该标签用于定义定义容器中的List集合,并支持通过list-class属性指定List集合的实现类。set:该标签用于定义容器中的Set集合,并支持通过set-class属性指定Set集合的实现类,map:该标签用于定义容器中的Map集合,并支持通过map-class属性指定Map集合的实现类properties:该标签用于加载一份属性文件,并根据加载的属性文件创建一个PropertiesBean实例。SpringELSpring的SpEL可以单独使用,可以使用SpEL对表达式计算、求值。SpEL主要提供了如下3个接口:ExpressionParser:该接口的实例负责解析一个SpEL表达式,返回一个Expression对象。Expression:该接口的实例代表一个表达式。EvaluationContext:上下文。Expression实例Expression实例代表一个表达式,它包含了如下方法可用于计算、得到表达式的值:ObjectgetValue():计算表达式的值。<T>TgetValue(Class<T>desiredResultType):计算表达式的值,而且尝试将该表达式的值当成desiredResultType类型处理。ObjectgetValue(EvaluationContextcontext):使用指定的EvaluationContext来计算表达式的值。<T>TgetValue(EvaluationContextcontext,Class<T>desiredResultType):使用指定的EvaluationContext来计算表达式的值。而且尝试将该表达式的值当成desiredResultType类型处理。在XML配置中使用SpELSpEL的一个重要作用就是扩展Spring容器的功能,允许在Bean定义中使用SpEL。XML配置文件和Annotation中都可以使用SpEL。在XML配置文件和Annotation中使用SpEL时,都需要在表达式外面增加#{}包围。SpEL语法详述(上)直接量表达式。5+4/3-2在表达式中创建数组。newint[6]或者newint[]{2,4}在表达式中创建List集合。{ele1,ele2,ele3...}在表达式中访问List、Map等集合元素:为了在SpEL中访问List集合的元素,可以使用list[index]格式、访问Map集合的元素,可以使用map[key]格式。在SpEL中调用方法与在Java代码中调用方法没有任何区别。与JSP2EL类似的是SpEL同样支持算术、比较、逻辑、赋值、三目运算赋等各种运算符,类型运算符:SpEL提供了一个特殊的运算符:T(类名),这个运算符用于告诉SpEL将该运算符内字符串当成“类”处理,避免Spring对其进行其他解析。SpEL语法详述(下)调用构造器:SpEL允许在表达式直接使用new来调用构造器,这种调用可以创建一个Java对象。变量:SpEL允许通过通过EvaluationContext来使用变量,该对象包含了一个setVariable(Stringname,Objectvalue)方法,该方法用于设置一个变量。自定义函数:SpEL允许开发者开发自定义函数。类似于JSP2EL中的自定义函数,所谓自定义函数,也就是为Java方法重新起个名字而已。安全导航:在SpEL中使用foo.bar语句时可能导致NullPointerException,因此可以写成foo?.bar?
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网行业技术交流发言稿
- 怀化学院《史学论文写作》2022-2023学年第一学期期末试卷
- 小学2021-2022学年第二学期德育工作成效总结
- 课堂管理的课程设计
- 怀化学院《初等数论》2023-2024学年第一学期期末试卷
- 连续桩基础课程设计
- 防排烟课程设计说
- 2024木材采购合同木材采购合体范文模板
- Phenazine-oxide-Phenazine-N-oxide-生命科学试剂-MCE
- Pectolinarigenin-Standard-生命科学试剂-MCE
- 提升初中英语书面表达能力的教学策略探析
- 第五单元写作《如何突出中心》公开课一等奖创新教学设计-统编版语文七年级上册
- 2023-2024学年北京朝阳区高三(上)期中地理试题及答案
- 江苏省连云港市海州区新海初级中学2023-2024学年七年级上学期期中数学试题
- 污水处理厂冬季安全生产基础知识
- 完整版八、施工现场总平面布置图
- 分析化学期中考试试题
- 新外研版高二英语选择性必修二Unit3-A-new-chapter课件(精编)
- 浙江省杭州市余杭区树兰中学2023--2024学年上学期九年级期中数学试卷
- 领导考察谈话怎么评价领导
- 叶片气动特性快速计算桨距角的改进算法
评论
0/150
提交评论