《Spring编程技术与应用》课件3.ppt

上传人(卖家):momomo 文档编号:5818489 上传时间:2023-05-11 格式:PPT 页数:52 大小:286KB
下载 相关 举报
《Spring编程技术与应用》课件3.ppt_第1页
第1页 / 共52页
《Spring编程技术与应用》课件3.ppt_第2页
第2页 / 共52页
《Spring编程技术与应用》课件3.ppt_第3页
第3页 / 共52页
《Spring编程技术与应用》课件3.ppt_第4页
第4页 / 共52页
《Spring编程技术与应用》课件3.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、3.1 Bean的依赖注入Spring常用两种依赖注入方式,常用两种依赖注入方式,一是设值注入方式,利用一是设值注入方式,利用Bean的的setter方法方法设置设置Bean的属性值;的属性值;另一种是构造注入,通过给另一种是构造注入,通过给Bean的构造方法的构造方法传递参数来实现传递参数来实现Bean的属性赋值。的属性赋值。3.1.1 设值注入方式1.定义接口文件定义接口文件【程序清单程序清单3-1】文件名为文件名为Shape.javapackage chapter3;public interface Shape public double area();/求形状的面积求形状的面积2.编写

2、实现接口的类【程序清单【程序清单3-2】文件名为】文件名为Rectangle.javapackage chapter3;public class Rectangle implements Shape double width,height;public double getWidth()return width;public void setWidth(double width)this.width=width;public double getHeight()return height;public void setHeight(double height)this.height=heigh

3、t;public double area()return width*height;【程序清单程序清单3-3】文件名为文件名为Circle.javapackage chapter3;public class Circle implements Shape double r;public double getR()return r;public void setR(double r)this.r=r;public double area()return Math.PI*r*r;3.AnyShape类的定义【程序清单【程序清单3-4】文件名为】文件名为AnyShape.javapackage ch

4、apter3;public class AnyShape Shape shape;public void setShape(Shape shape)this.shape=shape;public Shape getShape()return shape;public void ouputArea()System.out.println(面积面积=+shape.area();4.用配置文件实现属性注入【程序清单程序清单3-5】文件名为文件名为myContext.xml 2.5 5.测试程序【程序清单程序清单3-6】文件名为文件名为Test.javapackage chapter3;import

5、org.springframework.context.ApplicationContext;import org.springframework.context.support.*;public class Test public static void main(String args)ApplicationContext context=new FileSystemXmlApplicationContext(myContext.xml);AnyShape s=(AnyShape)context.getBean(anyShape);s.ouputArea();6.修改配置,再测试结果 3.

6、1.2 构造注入方式 构造注入方式通过构造方法的参数实现属性值的注入。构造注入方式通过构造方法的参数实现属性值的注入。public AnyShape(Shape shape)this.shape=shape;在配置文件中,将在配置文件中,将bean的的autowire属性设置为属性设置为“constructor”。构造注入的另一种方式是根据参数的位置顺序构造注入的另一种方式是根据参数的位置顺序来注入匹配参数值。来注入匹配参数值。第一个参数的索引值是第一个参数的索引值是0,第二个是,第二个是1,依此类推。,依此类推。建议按如下原则设计beanbean实现类通常要提供无参构造方法,在实现类通常要提

7、供无参构造方法,在JSP中使用中使用Bean时将用到该方法。时将用到该方法。接受构造注入的接受构造注入的bean,在类中需要提供对应的,在类中需要提供对应的构造方法。构造方法。接受设值注入的接受设值注入的bean,则应提供对应的,则应提供对应的setter方法,但并不强制提供方法,但并不强制提供getter方法。方法。3.1.3 集合对象注入List,Set和和 Map 是代表三种集合类型的接是代表三种集合类型的接口。在口。在Spring中,可通过一组内置的中,可通过一组内置的XML标标记(例如:记(例如:、)进行)进行配置,实现这些集合类型数据的注入。配置,实现这些集合类型数据的注入。1.B

8、ean的类定义【程序清单【程序清单3-7】文件名为】文件名为SomeBean.javapackage chapter3;import java.util.*;public class SomeBean private String myArray;private List myList;private Map myMap;public String getMyArray()return myArray;public void setMyArray(String myArray)this.myArray=myArray;public List getMyList()return myList;p

9、ublic void setMyList(List myList)this.myList=myList;public Map getmyMap()return myMap;public void setMyMap(Map myMap)this.myMap=myMap;2.配置文件【程序清单程序清单3-8】文件名为文件名为beans-config.xml JohnMaryJavaVB谢谢谢谢3.测试程序【程序清单【程序清单3-9】文件名为】文件名为testDemo.java.public class testDemo public static void main(String args)App

10、licationContext context=new FileSystemXmlApplicationContext(beans-config.xml);SomeBean myBean=(SomeBean)context.getBean(someBean);String strs=(String)myBean.getMyArray();/取得注入的字符串数组取得注入的字符串数组for(int i=0;i strs.length;i+)System.out.println(strsi);List x=(List)myBean.getMyList();/取得注入的取得注入的Listfor(int

11、 i=0;i x.size();i+)System.out.println(x.get(i);3.2 用自动扫描注解方式定义Bean定义定义Bean的另一种方式是使用自动扫描功能,的另一种方式是使用自动扫描功能,在在XML配置文件中加入如下配置:配置文件中加入如下配置:如此,如此,Spring 将扫描所有将扫描所有chapter3包及其子包包及其子包中的类,识别所有标记了中的类,识别所有标记了 Component、Controller、Service、Repository 注解注解的类。的类。(1)在程序清单在程序清单3-3上加上上加上Component注解。注解。package chapte

12、r3;Component public class Circle implements Shape(2)在程序清单在程序清单3-4中添加中添加Component注解。注解。package chapter3;Component public class AnyShape Resource(name=circle)Shape shape;/Shape接口类型接口类型 以上定义以上定义Bean的程序等价于前面的程序等价于前面XML定义定义Bean的的如下配置:如下配置:3.3 Spring Bean的生命周期 Spring通过通过IOC 容器管理容器管理Bean的生命周期,每个的生命周期,每个Bea

13、n从创建到从创建到消亡所经历的时间过程称为消亡所经历的时间过程称为Bean的生命周期,其过程包括:构造的生命周期,其过程包括:构造对象对象-属性装配属性装配-回调回调-初始化初始化-就绪就绪-销毁等几个阶段。销毁等几个阶段。p 初始化阶段初始化阶段Bean将执行将执行init-method属性设置的方法,属性设置的方法,p 销毁阶段销毁阶段Bean将执行将执行destroy-method属性设置的方法。属性设置的方法。p 如果如果Bean定义时实现了定义时实现了initializingBean接口,则初始化阶段将先执行该接口,则初始化阶段将先执行该接口中的接口中的AfterProperties

14、Set()方法,再执行方法,再执行init_method属性指定的方属性指定的方法。法。p 同样,如果同样,如果Bean定义时实现了定义时实现了DisposableBean接口,则在销毁阶段先执接口,则在销毁阶段先执行接口中定义的行接口中定义的destory()方法,再执行方法,再执行destroy-method属性指定的方属性指定的方法。法。每个每个Bean的生命周期的长短取决于其的生命周期的长短取决于其scope设置。而设置。而Bean的属性的属性装配则取决于装配方式的设置和依赖检查方式(装配则取决于装配方式的设置和依赖检查方式(dependency-check)的设置。)的设置。3.3.

15、1 Bean的范围作用域作用域描述描述singletonsingleton在每个在每个Spring IoCSpring IoC容器中一个容器中一个beanbean定义只会存在一个共享的定义只会存在一个共享的beanbean实例。换言之,实例。换言之,Spring IoCSpring IoC容器只会创建该容器只会创建该beanbean定义的唯一实定义的唯一实例。例。prototypeprototype每次请求时创建一个新的每次请求时创建一个新的beanbean实例,换言之,实例,换言之,IoCIoC容器中,同一容器中,同一个个beanbean对应多个对象实例。对应多个对象实例。requestre

16、quest每次每次HTTPHTTP请求将会有各自的请求将会有各自的beanbean实例。实例。sessionsession在一个在一个HTTP SessionHTTP Session中,一个中,一个beanbean定义对应一个实例。当定义对应一个实例。当HTTP HTTP SessionSession最终被废弃的时候,在该最终被废弃的时候,在该HTTP SessionHTTP Session作用域内的作用域内的beanbean也会被废弃掉。也会被废弃掉。global global sessionsession在一个全局的在一个全局的HTTP SessionHTTP Session中,一个中,一

17、个beanbean定义对应一个实例。典定义对应一个实例。典型情况下,仅在使用型情况下,仅在使用portlet contextportlet context的时候有效。的时候有效。3.3.2 Bean自动装配(autowire)的5种模式方式方式描述描述nono手动装配手动装配byNamebyName通过通过id id 的名字自动注入对象的名字自动注入对象byTypebyType通过类型自动注入对象通过类型自动注入对象constructorconstructor根据构造方法自动注入对象根据构造方法自动注入对象autodetectautodetect完全交给完全交给springspring管理管理

18、,按先按先constructorconstructor后后byTypebyType的顺序的顺序进行匹配。进行匹配。【应用经验应用经验】程序中可使用程序中可使用AutowiredAutowired注解定义某属性注入对象时注解定义某属性注入对象时用自动装配。例如:用自动装配。例如:AutowiredAutowired AmqpTemplateAmqpTemplate amqpTemplate;amqpTemplate;3.3.3 Bean的依赖检查可以在可以在标签中设定标签中设定“dependency-check”属性来实现依赖检查,属性来实现依赖检查,可以有四种依赖检查方式:可以有四种依赖检查方

19、式:simple:只检查基本数据类型和字符串对象:只检查基本数据类型和字符串对象属性是否完成依赖关系。属性是否完成依赖关系。objects:检查对象类型的属性是否完成依赖:检查对象类型的属性是否完成依赖关系。关系。all:则检查全部的属性是否完成依赖关系。:则检查全部的属性是否完成依赖关系。none:该方式为默认情形,表示不检查依赖:该方式为默认情形,表示不检查依赖性性3.4 使用基于注解的配置3.4.1 使用使用Configuration和和Bean进行进行Bean的声明的声明【程序清单【程序清单3-11】文件名为】文件名为MyConfig.javapackage chapter1;impo

20、rt org.springframework.context.annotation.*;Configurationpublic class MyConfig Beanpublic Speak mySpeak()Speak x=new Speak();/Speak类在第类在第1章例章例1-3定义定义x.setMessage(您好您好);return x;2.对Java类配置Bean的测试【程序清单程序清单3-12】文件名为文件名为SpeakTest5.javapackage chapter1;import org.springframework.context.annotation.Annota

21、tionConfigApplicationContext;public class SpeakTest5 public static void main(String args)AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(MyConfig.class);Speak s1=(Speak)ctx.getBean(mySpeak);System.out.println(s1+s1.getMessage();Import注解使用引入使用引入Import注解其他的配置类注解其他的配置类Conf

22、iguration Import(BookServiceConfig.class,BookDaoConfig.class)public class BookConfig /入口配置类入口配置类3.4.2 混合使用XML与注解进行Bean的配置1.以以XML配置为中心配置为中心package book.config;Configurationpublic class MyConfig Bean Scope(prototype)/指定指定Bean的作用域的作用域public UserDao userDao()return new UserDaoImpl();此时,只需在此时,只需在 XML 中作如

23、下声明即可:中作如下声明即可:特别地,如果存在多个标注了特别地,如果存在多个标注了Configuration的类,则需要在的类,则需要在 XML 文件中逐一列出。文件中逐一列出。2.以注解为中心的配置方式Configuration ImportResource(classpath:/book/config/spring-beans.xml)public class MyConfig 3.5 Spring的过滤器和监听器3.5.1 Spring过滤器过滤器过滤器(过滤器(Filter)是小型的)是小型的 Web 组件,在运组件,在运行时由行时由 Servlet 容器调用,用来拦截和处理请容器调用

24、,用来拦截和处理请求和响应。求和响应。Filter主要用于对用户请求进行预主要用于对用户请求进行预处理,也可对处理,也可对HttpServletResponse进行后进行后处理。一个请求和响应可被多个处理。一个请求和响应可被多个Filter拦截。拦截。编写编写Servlet过滤器类都必须实现过滤器类都必须实现javax.servlet.Filter接口。接口。接口中含有接口中含有3个方法:个方法:init(FilterConfig cfg):是:是Servlet过滤器的初始化过滤器的初始化方法;方法;doFilter(ServletRequest,ServletResponse,FilterC

25、hain):完成实际的过滤操作,:完成实际的过滤操作,FilterChain参数用参数用于访问后续过滤器;于访问后续过滤器;destroy():Servlet容器在销毁过滤器实例前调用该容器在销毁过滤器实例前调用该方法,用于释放方法,用于释放Servlet过滤器占用的资源。过滤器占用的资源。过滤器典型应用-解决中文乱码 chinacode org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 chinacode/*如此处理后,对服务器的所有如此处理后,对服务器的所有URL 请求的数据都会被转码为请求的数据都会

26、被转码为 UTF-8 编码格式。编码格式。3.5.2 Spring监听器常用监听器接口有:常用监听器接口有:ServletRequestListener:监听:监听http请求;请求;HttpSessionListener:监听:监听session请求;请求;ServletContextListener:用于:用于Servlet应用应用环境的数据变化的处理。环境的数据变化的处理。监听器应用举例-在线人数的统计 编写监听器编写监听器【程序清单【程序清单3-13】文件名为】文件名为OnlineCounterListener.javapackage chapter3;import javax.ser

27、vlet.http.*;public class OnlineCounterListener implements HttpSessionListener public static long online=0;public void sessionCreated(HttpSessionEvent e)online+;/用户进入,创建用户进入,创建sessionpublic void sessionDestroyed(HttpSessionEvent e)online-;/用户离开,用户离开,session结束结束 web.xml中加入如下内容:中加入如下内容:chapter3.OnlineC

28、ounterListener 在在JSP页面显示在线人数页面显示在线人数在线人数在线人数:3.6 Spring的文件资源访问3.6.1 用用Resource接口访问文件资源接口访问文件资源Spring 定义了一个定义了一个 org.springframework.core.io.Resource 接口,并接口,并提供了若干提供了若干 Resource 接口的实现类。这些实现类可以从不同途径加载资源。接口的实现类。这些实现类可以从不同途径加载资源。FileSystemResource:以文件系统绝对路径的方式访问资源;以文件系统绝对路径的方式访问资源;例如:例如:Resource res1=ne

29、w FileSystemResource(f:/data.mdb);ClassPathResource:以类路径的方式访问资源:以类路径的方式访问资源;例如:例如:Resource res2=new ClassPathResource(file1.txt);UrlResource:以:以URL访问网络资源。访问网络资源。例如:例如:Resource res3=new UrlResource(http:/ 接口的常用方法getFileName():获取文件名;获取文件名;getFile():获取资源对应的:获取资源对应的 File 对象;对象;getInputStream():直接获取文件的输入

30、流;:直接获取文件的输入流;exists():判断资源是否存在。:判断资源是否存在。3.6.2 用ApplicationContext接口访问文件资源ApplicationContext 将根据其对象定义的资将根据其对象定义的资源访问策略来获取资源,从而将应用程序和具源访问策略来获取资源,从而将应用程序和具体的资源访问策略分离开来。体的资源访问策略分离开来。ApplicationContext ctx=new ClassPathXmlApplicationContext(beans.xml);Resource res=ctx.getResource(book.xml);也可以不管上下文环境,在

31、查找资源标识中强制加上路径前缀,也可以不管上下文环境,在查找资源标识中强制加上路径前缀,例如:例如:Resource template=ctx.getResource(classpath:somepath/my.txt);以下是常见的前缀及对应的访问策略:以下是常见的前缀及对应的访问策略:classpath:以以ClassPathResource实例来访问类加载路径实例来访问类加载路径下的资源。下的资源。file:以以FileSystemResource实例来访问本地文件系统的资实例来访问本地文件系统的资源。源。http:以以UrlResource实例来访问基于实例来访问基于HTTP协议的网络

32、资源。协议的网络资源。无前缀无前缀由由ApplicationContext的实现类来决定访问策略。的实现类来决定访问策略。3.6.3 用ResourceUtils类访问文件资源Spring 提供了一个提供了一个 ResourceUtils 工具类,工具类,支持支持“classpath:”和和“file:”的地址前缀,它的地址前缀,它能够从指定的地址加载文件资源。例如:能够从指定的地址加载文件资源。例如:File clsFile=ResourceUtils.getFile(classpath:file1.txt);File myFile=ResourceUtils.getFile(file:f:

33、/ecjtu/file1.txt);3.6.4 FileCopyUtils类的使用FileCopyUtils类提供了许多静态方法,能够将输入源的数据拷贝到输出的目类提供了许多静态方法,能够将输入源的数据拷贝到输出的目标中。标中。static void copy(byte in,File out):将:将byte 拷贝到文件中;拷贝到文件中;static void copy(byte in,OutputStream out):将:将byte 拷贝到输出拷贝到输出流中;流中;static int copy(File in,File out):将文件拷贝到另一个文件中;:将文件拷贝到另一个文件中;s

34、tatic int copy(InputStream in,OutputStream out):将输入流的数据:将输入流的数据拷贝到输出流中;拷贝到输出流中;static int copy(Reader in,Writer out):从字符输入流读取数据拷贝到字:从字符输入流读取数据拷贝到字符输出流中;符输出流中;static void copy(String in,Writer out):将字符串拷贝到字符输出流中。:将字符串拷贝到字符输出流中。static String copyToString(Reader in):返回从字符输入流读取的内容。返回从字符输入流读取的内容。以下为应用举例:

35、以下为应用举例:Resource res=new ClassPathResource(conf/file1.txt);FileCopyUtils.copy(res.getFile(),new File(res.getFile().getParent()+/file2.txt);3.6.5 属性文件操作 org.springframework.core.io.support.PropertiesLoaderUtils 可直接通过基于可直接通过基于类路径类路径的地址加载属性文件资源的地址加载属性文件资源,以下代码假设以下代码假设 jdbc.properties 是位于类路径下的文件:是位于类路径下

36、的文件:Properties props=PropertiesLoaderUtils.loadAllProperties(jdbc.properties);System.out.println(props.getProperty(jdbc.driverClassName);此外,此外,PropertiesLoaderUtils 还可从还可从 Resource 对象对象中加载属性资源中加载属性资源,该工具类含有如下两个实用方法:,该工具类含有如下两个实用方法:p static Properties loadProperties(Resource resource):从:从 Resource 中加

37、中加载属性;载属性;p static void fillProperties(Properties props,Resource resource):将:将 Resource 中的属性数据添加到一个已经存在的中的属性数据添加到一个已经存在的 Properties 对象中。对象中。3.7 WebUtils工具类利用以下方法可访问利用以下方法可访问Session和和Cookie的属性:的属性:Cookie getCookie(HttpServletRequest request,String name):获取获取 HttpServletRequest 中特定名字的中特定名字的Cookie 对象。例

38、如:对象。例如:String username=WebUtils.getCookie(request,loginname).getValue();Object getSessionAttribute(HttpServletRequest request,String name):获取:获取 HttpSession 特定属性名的对象。特定属性名的对象。String getSessionId(HttpServletRequest request):获取:获取Session ID的值;的值;。此外,此外,WebUtils还提供了一些和还提供了一些和ServletContext相关的方便方法:相关的方

39、便方法:String getRealPath(ServletContext servletContext,String path):获取相对路径为:获取相对路径为path的的URL文件对应服务器文件系统中的物理文件对应服务器文件系统中的物理路径。路径。3.8 Spring的SpEL语言SpEL主要提供如下两个接口:主要提供如下两个接口:(1)ExpressionParser接口接口:该接口的实例通:该接口的实例通过过parseExpression方法解析一个表达式,返方法解析一个表达式,返回回Expression对象。例如:对象。例如:ExpressionParser parser=new S

40、pelExpressionParser();/创建解析器创建解析器Expression exp=parser.parseExpression(Hello World!+12);/解析表达式解析表达式(2)Expression接口:该接口的实例代表一个表达式。该接口通过该接口的实例代表一个表达式。该接口通过getValue方法计算表达式的值。方法计算表达式的值。常用的几种形态为:常用的几种形态为:Object getValue():计算表达式的值。例如:计算表达式的值。例如:exp.getValue();T getValue(ClassdesiredResultType):计算表达式,结:计算表

41、达式,结果为果为desiredResultType类型。例如:类型。例如:exp.getValue(String.class);Object getValue(Object rootObject):以以rootObject作为表达式的作为表达式的root对象来计算表达式的值。对象来计算表达式的值。T getValue(Object rootObject,ClassdesiredResultType):以以rootObject作为表达作为表达式的式的root对象来计算表达式的值对象来计算表达式的值,且结果为且结果为desiredResultType类型。类型。Object getValue(Ev

42、aluationContext context):使用指定的使用指定的EvaluationContext计算表达式的值。计算表达式的值。常用的EvaluationContext对象有StandardEvaluationContext。setVariable(String name,Object value):向向EvaluationContext中加入一个名为中加入一个名为name,值为值为value的对象。的对象。setRootObject(Object rootObject):设置设置root对象。对象。registerFunction(String name,Method m):将将m方

43、法注册为自定义函数。方法注册为自定义函数。SpEL引用变量 使用使用“#variableName”引用自定义变量。引用自定义变量。使用使用“#root”引用根对象引用根对象;使用使用“#this”引用当前求值对象。引用当前求值对象。EvaluationContext context=new StandardEvaluationContext();context.setVariable(x,你好你好);String result1=parser.parseExpression(#x).getValue(context,String.class);假设,假设,Person对象包含属性对象包含属性n

44、ame和和age。则以。则以下程序的下程序的s2结果为结果为“姓名姓名=张三张三”。EvaluationContext context=new StandardEvaluationContext();Person p=new Person(张三张三,15);(StandardEvaluationContext)context).setRootObject(p);String s2=parser.parseExpression(姓名姓名=+name).getValue(context,String.class);3.8.2 SpEL支持的表达式类型1基本表达式基本表达式包括字面量表达式、关系,逻

45、辑与算数运算包括字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算表达式、字符串连接及截取表达式、三目运算及及Elivis表达式、正则表达式等。在表达式中表达式、正则表达式等。在表达式中可使用括号,括号里的具有高优先级。可使用括号,括号里的具有高优先级。2类相关表达式 包括类类型表达式、类实例化、包括类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、Bean引用等。运算符引用等。运算符“new”

46、和运算符和运算符“instanceof”与与Java使用一样。使用一样。使用时注意以下几点:使用时注意以下几点:1)使用)使用“T(Type)”来表示某类型的类,进而访问类的静态方法及静态属性。来表示某类型的类,进而访问类的静态方法及静态属性。如如“T(Integer).MAX_VALUE”;“T(Integer).parseInt(24)”。在。在标识类时,除了标识类时,除了“java.lang”包中的类以外,必须使用全限定名。包中的类以外,必须使用全限定名。2)SpEL允许通过允许通过“#variableName=value”形式给自定义变量或对象赋值。形式给自定义变量或对象赋值。3)对象

47、属性和方法调用同)对象属性和方法调用同Java语法,但语法,但SpEL对于属性名的首字母是不区分对于属性名的首字母是不区分大小写的。大小写的。另外,另外,SpEL还引入了还引入了Groovy语言中的安全导航运算符语言中的安全导航运算符“(对象对象|属性属性)?.属性属性”,在连接符,在连接符.之前加上之前加上?是为了进行空指针处理是为了进行空指针处理,如果对象是如果对象是null则计算中止,直接返回则计算中止,直接返回null。3集合相关表达式 内联数组和内联数组和Java 数组定义类似,在定义时可进行数组数组定义类似,在定义时可进行数组初始化。例如:初始化。例如:int x=(int)par

48、ser.parseExpression(new int1,2,3).getValue(context);在在Bean配置中可通过配置中可通过SpEL给集合和数组注入元素给集合和数组注入元素SpEL对集合的访问常用形式有:(1)使用使用“集合集合索引索引”访问集合元素,使用访问集合元素,使用“mapkey”访问字典访问字典元素。元素。(2)获取集合中的若干元素(也叫过滤)获取集合中的若干元素(也叫过滤)从原集合选择出满足条件的元素作为结果集合。从原集合选择出满足条件的元素作为结果集合。“.?”用于求所用于求所有符合条件的元素;有符合条件的元素;“.”用于求第一个符合条件的元素;用于求第一个符合条

49、件的元素;“.$”用于求最后一个符合条件的元素。用于求最后一个符合条件的元素。例如:选出人口大于例如:选出人口大于10000的的cities元素作为元素作为bigCitis的值。的值。(3)用用“.!”选中已有集合中元素的某一个或几个属性构造新的集合选中已有集合中元素的某一个或几个属性构造新的集合 4表达式模板 模板表达式是对直接量表达式的扩展,它允许在表达式中插入模板表达式是对直接量表达式的扩展,它允许在表达式中插入#expr例如,以下程序中,例如,以下程序中,对对p对象求值时,对象求值时,#name代表获取代表获取p的的name属性属性,因此输出结果为因此输出结果为“姓名姓名:张三张三”。

50、ExpressionParser parser=new SpelExpressionParser();EvaluationContext context=new StandardEvaluationContext();Person p=new Person(张三张三,15);Expression exp=parser.parseExpression(姓名姓名:#name,new TemplateParserContext();System.out.println(exp.getValue(p);/p作为求值表达式的根对象作为求值表达式的根对象3.8.3 SPEL应用-在Bean配置中(1)引用

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《Spring编程技术与应用》课件3.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|