iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Software Development

這些年,我們早該學會的Spring Framework系列 第 13

Day13 - Dependency Injection (8) SpEL

  • 分享至 

  • xImage
  •  

Review

Container的職責在於創建、配置與組裝bean,昨天我們學到了
如何使用bean標籤中autowire屬性為bean自動配置

今日將討論如何使用SpEL來讓我們更方便設定Bean

測試案例準備

public class Employee {
    String empId;
    String empName;
    Double Salary;
    UserRole role;
    String title;
    String dept;
    //getter setter toString略
}
public class UserRole {
    String roleName;
    //getter setter toString略
}
public class UserInfo {
    private String title;
    private String dept;
    //getter setter toString略
}

什麼是SpEL(Spring Expression Language)

SpEL是Spring提供可以在runtime時期操作或查詢物件的一種語法,它有很多強大功能,但在這邊我們只會介紹在設定檔中SpEL會如何使用

基本語法

語法形式為#{<expression string>}包覆expression

XML Configuration

  • literal
  • 引用其它物件屬性
  • 引用其它bean
  • 調用靜態方法
  • 調用非靜態方法
<?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="role" class="com.swj.UserRole">
        <property name="roleName" value="部門主管"></property>
    </bean>
    <bean id="userInfo" class="com.swj.UserInfo">
        <property name="title" value="經理"></property>
        <property name="dept" value="資訊部"></property>
    </bean>
    <bean id="emp" class="com.swj.Employee">
        <!--  literal      -->
        <property name="salary" value="#{26400*12}"></property>
        <!--  引用其它物件屬性      -->
        <property name="title" value="#{userInfo.title}"></property>
        <!--  引用其它bean     -->
        <property name="role" value="#{role}"></property>
        <!--  調用靜態方法      -->
        <property name="empId" value="#{ T(java.lang.Math).random() * 100.0}"></property>
        <!--  調用非靜態方法      -->
        <property name="dept" value="#{userInfo.getDept}"></property>
    </bean>
</beans>
@Test
public void testDay13(){
    ApplicationContext ioc = new ClassPathXmlApplicationContext("bean13.xml");
    System.out.println("容器啟動完成....");
    Employee emp = ioc.getBean("emp",Employee.class);
    System.out.println(emp);
}

Result
https://ithelp.ithome.com.tw/upload/images/20220928/20128084w4p2wMV7tS.jpg

Annotation Configuration

這個部分會留到註解注入再談,可以先參考連結說明


上一篇
Day12 - Dependency Injection (7) XML設定檔的autowire
下一篇
Day14 - Dependency Injection (9) Annotation-based configuration
系列文
這些年,我們早該學會的Spring Framework30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言