0
点赞
收藏
分享

微信扫一扫

Spring基于XML的DI-使用SPEL注入

Spring基于XML的DI-使用SPEL注入

SpEL,Spring Expression Language,即Spring EL表达式语言。在Spring配置文件中为Bean的属性注入值时,可直接使用SpEL表达式计算的结果。SpEl表达式一#开头,后跟一对大括号​​<bean id="hello" value="#{……}">​​​

其配置方法在​​spring-framework-4.2.1.RELEASE-dist\spring-framework-4.2.1.RELEASE\docs\spring-framework-reference\html.index​​​中有详细讲述,Ctrl+F​​SpEL​​​


Spring基于XML的DI-使用SPEL注入_java

举个栗子

Student.java

package com.hk.spring.di09;

public class Student {

private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}


}

Person.java

package com.hk.spring.di09;

public class Person {

private String personName;
public String getPersonName() {
return personName;
}
public int getPersonAge() {
return personAge;
}
private int personAge;
public void setPersonName(String personName) {
this.personName = personName;
}
public void setPersonAge(int personAge) {
this.personAge = personAge;
}
/**
* 大于25就返回25
* @param personAge
* @return
*/
public int countAge(int personAge){
return personAge > 25 ? 25 : personAge;
}
@Override
public String toString() {
return "Person [personName=" + personName + ", personAge=" + personAge
+ "]";
}
}

配置(applicationContext.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- personAge年龄为50以内随机数 -->
<bean id="person" class="com.hk.spring.di09.Person">
<property name="personName" value="李四"/>
<property name="personAge" value="#{T(java.lang.Math).random()*50}"/>
</bean>
<!-- myStudent的属性与 person值相同-->
<bean id="myStudent" class="com.hk.spring.di09.Student" autowire="byType">
<!-- person.personName底层调用的是bean的Get方法,bean内必须包含属性的get方法 -->
<property name="name" value="#{person.personName}"/>
<!-- 调用bean的方法 -->
<property name="age" value="#{person.countAge(person.personAge)}"/>
</bean>
</beans>

MyTest.java

package com.hk.spring.di09;

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

public class Mytest {
@Test
public void test1(){
String resource = "com/hk/spring/di09/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
Student stu = (Student) ac.getBean("myStudent");
Person person = (Person) ac.getBean("person");
System.out.println(stu+"\n"+person);

}
}

结果

Student [name=李四, age=25]
Person [personName=李四, personAge=30]



举报

相关推荐

0 条评论