Java如何使用Spring EL注入bean,属性和方法?
使用Spring表达式语言(SpEL),我们可以在创建bean时动态地将对象引用或值注入到bean中,而不是在开发时进行静态定义。在此示例中,您将学习如何使用另一个bean的属性来注入bean的属性。
首先创建两个类,Student和Grade类。学生对象将具有存储其成绩名称的属性,该属性将从成绩对象获得。
package org.nhooo.example.spring.el; public class Student { private String name; private String grade; public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } }
package org.nhooo.example.spring.el; public class Grade { private String name; private String description; public Grade() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
接下来,我们创建spring配置文件。在此配置中,我们有两个bean定义,gradeand和studentbean。我们设置bean的nameanddescription属性grade。
我们还student使用字符串文字设置bean的name属性。但是,使用SpringEL将grade属性值设置为grade的Bean名称属性#{grade.name}。该表达式告诉spring容器查找id为的beangrade,读取其name并将其分配给student的等级。
<?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"> <bean id="grade"> <property name="name" value="Beginner"/> <property name="description" value="A beginner grade."/> </bean> <bean id="student"> <property name="name" value="Alice"/> <property name="grade" value="#{grade.name}"/> </bean> </beans>
然后创建以下程序以执行spring容器并从中检索学生bean。
package org.nhooo.example.spring.el; import org.nhooo.example.spring.model.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpELDemo { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spel-example.xml"); Student student = (Student) context.getBean("student"); System.out.println("Name = " + student.getName()); System.out.println("Grade = " + student.getGrade()); } }
该程序将打印以下输出:
Name = Alice Grade = Beginner