Java의 SpEL 표현식

Spring 3는 강력하고 간결한 방식으로 bean 속성과 생성자 매개변수에 값을 어셈블할 수 있는 Spring Expression Language(Spring Expression Language, SpEL)를 도입합니다.

SpEL에는 다음과 같은 많은 기능이 있습니다.

bean ID를 사용하여 bean 참조

메서드 호출 및 개체 속성 액세스

값에 대한 산술, 관계 및 논리 연산 수행

정규식 일치

설정 작업

SpEL 기본 표현식

리터럴 값을 나타냅니다.

부동 소수점 값을 나타냅니다.

#{
    
    3.1415}

값은 과학 표기법으로도 표현할 수 있습니다.

#{
    
    9.87E4}

식으로 계산한 값은 98,700입니다.

문자열 유형의 리터럴 값을 계산하는 데 사용됩니다.

#{
    
    'HELLO'}

리터럴 값 true 및 false는 해당 부울 값으로 평가됩니다.

#{
    
    flase}

참조 빈, 속성 및 메서드

SpEL이 할 수 있는 또 다른 기본적인 일은 ID로 다른 빈을 참조하는 것입니다. 예를 들어 SpEL을 사용하여 bean을 다른 bean의 속성에 연결할 수 있습니다.

빈 ID를 SpEL 표현식으로 사용

#{
    
    sgtPeppers}

sgtPeppers为beanID

sgtPeppers의 아티스트 속성 참조

#{
    
    sgtPeppers.artist}

ID가 sgtPeppers인 빈이 참조되고 아티스트 속성에 대한 참조가 뒤따릅니다.

artistSelector의 selectArtist() 메서드를 호출합니다.

#{
    
    artistSelector.selectArtist()}

ID가 artistSelector인 Bean을 참조하고 Bean의 selectArtist() 메소드를 호출합니다.

호출된 메서드의 반환 값으로 해당 메서드를 호출할 수도 있습니다.

#{
    
    artistSelector.selectArtist().toUpperCase()}

selectArtist() 메서드가 문자열을 반환하는 경우 다음을 호출할 수 있습니다.

toUpperCase()를 사용하여 모든 문자열을 대문자로 변경

selectArtist()의 반환 값이 null이면 NullPointerException이 발생하고 형식 안전 연산자를 사용할 수 있습니다.

#{
    
    artistSelector.selectArtist()?.toUpperCase()}

점( . )을 사용하여 toUpperCase() 메서드에 액세스하는 대신 이제 "?." 연산자를 사용합니다. 이 연산자는 오른쪽에 있는 콘텐츠에 액세스하기 전에 해당 요소가 null이 아닌지 확인합니다. 따라서 selectArtist()의 반환 값이 null이면 SpEL은 toUpperCase() 메서드를 호출하지 않습니다. 표현식의 반환 값은 null입니다.

표현식에서 유형 사용

SpEL에서 클래스 범위의 메서드 및 상수에 액세스하려면 키 연산자 T()에 의존해야 합니다.

Java의 Math 클래스를 SpEL로 표현하기 위해서는 다음과 같이 T() 연산자를 사용해야 한다.

T(java.lang.Math).PI

PI 값을 빈 속성에 연결

T() 연산자로 얻은 유형의 정적 메서드는 다음과 같이 호출할 수 있습니다.

T(java.lang.Math).random()

0과 1 사이의 난수 계산

SpEL 연산자

간단한 표현식을 더 복잡한 표현식으로 결합

계산하다

#{
    
    T(java.lang.Math).PI * circle.radius ^ 2}

원빈에 정의된 원의 면적을 계산

문자열 유형의 값을 사용할 때 "+" 연산자는 Java와 동일하게 연결 연산을 수행합니다.

비교 연산자

#{
    
    counter.total == 100}
#{
    
    counter.total eq 100}

두 숫자가 같은지 비교하려면 이중 같음 연산자를 사용할 수 있습니다.

리터럴 eq 연산자를 사용할 수도 있습니다.

식은 부울 값으로 평가됩니다.

삼항 연산자(삼항)

#{
    
    scoreboard.score > 1000 ? "winner" : "loser"}

scoreboard.score>1000이면 계산 결과는 String 클래스의 "Winner!", 그렇지 않으면 Loser

삼항 연산자의 일반적인 사용 사례는 null 값을 확인하고 null을 기본값으로 바꾸는 것입니다.

#{
    
    disc.title ?: 'Rattleand Hum'}

disc.title의 값이 null인지 여부를 판단하고, null이면 식의 계산 결과는 "Rattle and Hum"입니다.

정규식 평가

텍스트로 작업할 때 텍스트가 특정 패턴과 일치하는지 확인하는 것이 유용한 경우가 있습니다. SpEL은 일치 연산자를 통해 표현식에서 패턴 일치를 지원합니다. 일치 작업

문자열 유형의 텍스트(왼쪽 인수)에 정규식(오른쪽 인수)을 적용합니다. 일치 작업 결과는 부울 유형의 값을 반환합니다.

정규 표현식이 일치하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

#{
    
    admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._%+-]+\\.com'}

문자열에 유효한 이메일 주소가 포함되어 있는지 확인

컬렉션 계산

목록의 요소를 참조

#{
    
    jukebox.song[4].title}

ID가 있는 Jukebox Bean에서 파생된 노래 컬렉션의 다섯 번째(0부터 시작) 요소의 제목 속성을 계산합니다.

주크박스에서 무작위로 선택

#{
    
    jukebox.song [T(java.lang.Math).random() * jukebox.songs.size() ].title}

"[]" 연산자는 컬렉션에서 요소를 가져오거나 인덱스로 배열을 가져오는 데 사용됩니다. 실제로 문자열에서 문자를 가져올 수도 있습니다.

#{
    
    'this is a test' [3]}

String의 네 번째(0부터 시작) 문자인 "s"를 참조합니다.

쿼리 연산자( .?[])

컬렉션의 하위 집합을 가져오기 위해 컬렉션을 필터링하는 데 사용됩니다.

#{
    
    jukebox.songs.?[artist eq 'Aerosmith']}

아티스트 속성이 Aerosmith인 주크박스의 모든 노래를 가져오기 위해 선택 연산자는 대괄호 안에 다른 표현식을 허용합니다. SpEL이 노래 목록을 반복할 때 노래 컬렉션의 각 항목에 대해 이 표현식을 평가합니다. 표현식이 true로 평가되면 항목이 새 컬렉션에 배치됩니다. 그렇지 않으면 새 컬렉션에 배치되지 않습니다. 이 경우 내부 표현식은 노래의 아티스트 속성이 Aerosmith와 같은지 확인합니다.

“.^[]”和“.$[]”, 각각 컬렉션의 첫 번째 및 마지막 일치 항목을 쿼리하는 데 사용됩니다.

컬렉션의 각 구성원에서 특정 속성을 선택하여 다른 컬렉션에 배치하는 프로젝션 연산자( .![])

메모:

위의 환경은 ubuntu16.04 lts에서 성공적으로 테스트되었습니다.

위의 텍스트는 모두 개인적인 의견입니다. 실수나 제안 사항이 있으면 제 시간에 연락하십시오.

추천

출처blog.csdn.net/qq_54042324/article/details/122073047