发表于: 2017-08-28 21:33:07

1 870


一、今日完成

1.周日临时有事,没有学习Spring表达式语言,落下了一天的任务。

2.学习SqEL

1)概念学习。SqEL是一种表达式语言,提供一组扩展功能,,从而可以与一个基于Spring的应用程序中的运行时对象交互;可以在XML配置和编程的Java代码中使用SqEL。

2)使用SqEL配置应用程序(基于XML的配置)

i.使用IDEA新建一个maven web项目,向pom.xml中添加spring-expression、spring-corespring-context,添加<properties>元素统一配置spring版本:

<spring.version>4.2.10.RELEASE</spring.version>

ii.在src/main/resource目录下,新建上下文配置文件applicationContext.xml,在<Beans>元素中创建名为MyBean的<Bean>,使用一个表达式(包含在#{…}中)设置该Bean的message字段,获取系统属性user.language。

<bean id="show1" class="com.wiley.beginningspring.ch9.MyBean">
<property name="message" value="#{systemProperties['user.language']}" />
</bean>

iii.在src/main/java/com.wiley.beginningspring.ch9目录下创建一个MyBean类,定义setter和getter方法

package com.wiley.beginningspring.ch9;

public class MyBean {
private String message;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}
}

iv.src/main/java/com.wiley.beginningspring.ch9目录下创建一个Main类  

package com.wiley.beginningspring.ch9;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class Main {

public static void main(String... args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean myBean = context.getBean(MyBean.class);
System.out.println(myBean.getMessage());
}
}

 3)使用SqEL配置应用程序(基于注解的配置)

 i.使用IDEA新建一个maven web项目,引入和上面相同的依赖项

ii.src/main/java/com.wiley.beginningspring.ch9目录下创建一个ApplicationConfig类、MyBean类

package com.wiley.beginningspring.ch9;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan(basePackages = {"com.wiley.beginningspring.ch9"})
public class ApplicationConfig {
}
package com.wiley.beginningspring.ch9;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


@Component
public class MyBean {

@Value("#{systemProperties['user.language']}")
private String message;

public String getMessage() {
return message;
}

}

使用@Component注解将MyBean定义为一个Spring Bean,在message字段上使用@Value注解,当实例化Bean时,将使用注解设置默认值,使用#{systemProperties['user.language']}表达式来设置该值。

4)为应用程序上下文编写XML代码时,有#{…}和${…}两种语法。其中,使用${…}定义属性占位符,就像从一个属性文件中读取值,并使用已经定义的值替换匹配项;使用#{…}所定义的Spring表达式将被动态评估。

SqEL上下文定义的每一个表达式一般先被解析然后被评估。而解析的过程,先创建一个实现了ExpressionParser接口的分析器,然后调用ExpressionParser接口提供的pareseExpression方法去解析表达式。被解析的表达式被视为一个表达式模板,用来定义评价块。当文本前缀和后缀分割后,评估块就确定了。在SqEL中,默认前缀为'#'后缀为'}'。如果没有前后缀,表达式字符串将被视为文本(这仅针对XML配置有效,编程解析不需要前后缀)。

ExpressionParser parser = new SpelExpressionParser();

Expression expression = parser.parserExpression("'Hello World'');

5)学习SqEL调用Spring Bean方法

i.使用IDEA新建一个maven web项目,添加spring依赖项;

ii.在src/main/resource目录下,新建上下文配置文件applicationContext.xml,

<bean id="show1" class="com.wiley.beginningspring.ch9.Show">
<property name="instrument" value="Piano" />
<property name="song" value="Turning Tables" />
</bean>

<bean id="show2" class="com.wiley.beginningspring.ch9.Show">
<property name="instrument" value="Guitar" />
<property name="song" value="#{show2.guitarSong()}" />
</bean>

iii.src/main/java/com.wiley.beginningspring.ch9目录下新建Show类

package com.wiley.beginningspring.ch9;


public class Show {

private String instrument;
private String song;

public void setInstrument(String instrument) {
this.instrument = instrument;
}

public void setSong(String song) {
this.song = song;
}

public String guitarSong() {
return "More Than Words";
}

public void present() {
System.out.println("Playing " + song + " with instrument " + instrument);
}
}

再新建Main类

package com.wiley.beginningspring.ch9;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String... args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Show show1 = (Show) context.getBean("show1");
show1.present();
Show show2 = (Show) context.getBean("show2");
show2.present();
}
}

在Main类中,首先创建应用程序上下文,访问Bean,然后调用presen()方法。

iv.在src/test目录下,新建测试类,在字符串上调用方法

public class MethodInvocationStringConcatTest {

ExpressionParser parser;

@Before
   public void setup() {
parser = new SpelExpressionParser();
}

@Test
   public void helloParsedAndConcatenatedWithWorld() {
Expression exp = parser.parseExpression("'Hello'.concat(' World!')");
String value = exp.getValue(String.class);
assertThat(value, is("Hello World!"));
}
}

将两个字符串代码连接起来,然后确定结果与字符串结果Hello World!相匹配。

v.在表达式中,通过调用对象的构造函数并提供参数来创建对象

Expression exp = parser.parseExpression(" new Double (3.1415926)");

6)学习SqEL基本运算符和用法。


二、明日计划

1.复习Spring MVC的基本实现流程,写一个小程序块;

2.学习mybatis基本用法


三.遇到的问题

1)现在每天花了不少精力时间在spring框架的基础知识上,但是每天可以记住并能够使用的知识点不多,现在先走马观花了解这些,只要还是紧跟任务的技能需求,以后遇到了相关知识点可以快速反应过来能够去查找学习起来。

2)虽然这几天学习了Spring IoC容器的创建和使用、依赖注入,但是还有比较生疏,计划每天还是需要抽一点时间时常去温习。


四、收获

如上,学习SqEL。



返回列表 返回列表
评论

    分享到