Master Spring & Java Development!
Subscribe to Ram N Java for clean, beginner-friendly coding guides!
🔔 Subscribe to Ram N JavaOverview: Regex with Spring Expression Language (SpEL)
The Spring Expression Language (SpEL) provides powerful evaluation capabilities, including built-in pattern matching using regular expressions. This allows you to evaluate strings against complex patterns dynamically at application startup or bean initialization.
In this guide, you will learn how to evaluate regular expressions directly using SpEL and inject the resulting boolean verification flag into your Spring beans using the @Value annotation.
Understanding the 'matches' Operator
SpEL introduces the intuitive matches keyword to perform regular expression checks directly within expression definitions.
-
Pattern Syntax: The syntax follows the format
'inputString' matches 'regexPattern'. -
Boolean Output: If the string matches the specified pattern, SpEL evaluates to
true; otherwise, it resolves tofalse. - Validation Scenarios: Ideal for validating formatted strings like email addresses, phone numbers, or zip codes during bean setup.
Configuring Pattern Matching with @Value
You can annotate your component's fields or setter methods to evaluate regex patterns automatically:
-
Annotation Declaration: Annotate a
booleanfield with@Value("#{customer.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}'}"). - Dynamic Evaluation: Spring inspects the bean property, runs the regex match, and assigns the boolean outcome directly to your field.
Recommended Next Videos from Ram N Java
Click here to watch on Youtube:
https://www.youtube.com/watch?v=yHnJW78Wm78&list=UUhwKlOVR041tngjerWxVccw
Click the below Image to Enlarge:
| The regular expression in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| The regular expression in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
| The regular expression in Spring Expression Language SpEL [Annotation] | Spring Tutorial |
pom.xml
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ram.core</groupId>
<artifactId>SpringDemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringDemo</name>
<url>http://maven.apache.org</url>
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- Spring 5 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
Email.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("email")
public class Email
{
@Value("ram@yahoo.com")
private String emailId;
@Value("100")
private String contentId;
public String getEmailId()
{
return emailId;
}
public void setEmailId(String emailId)
{
this.emailId = emailId;
}
public String getContentId()
{
return contentId;
}
public void setContentId(String contentId)
{
this.contentId = contentId;
}
@Override
public String toString()
{
return "Email [emailId=" + emailId + ", contentId=" + contentId + "]";
}
}
Employee.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("employee")
public class Employee
{
@Value("10")
private int id;
@Value("Peter")
private String name;
private String digitRegEx = "\\d+";
private String emailRegEx = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)"
+ "*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
@Value("#{email.emailId matches employee.emailRegEx}")
private String isValidEmail;
@Value("#{email.contentId matches employee.digitRegEx}")
private String isValidContentId;
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getDigitRegEx()
{
return digitRegEx;
}
public void setDigitRegEx(String digitRegEx)
{
this.digitRegEx = digitRegEx;
}
public String getEmailRegEx()
{
return emailRegEx;
}
public void setEmailRegEx(String emailRegEx)
{
this.emailRegEx = emailRegEx;
}
public String getIsValidEmail()
{
return isValidEmail;
}
public void setIsValidEmail(String isValidEmail)
{
this.isValidEmail = isValidEmail;
}
public String getIsValidContentId()
{
return isValidContentId;
}
public void setIsValidContentId(String isValidContentId)
{
this.isValidContentId = isValidContentId;
}
@Override
public String toString()
{
return "Employee [id=" + id + ", name=" + name + ", isValidEmail="
+ isValidEmail + ", isValidContentId=" + isValidContentId + "]";
}
}
applicationContext.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.ram" />
</beans>
App.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.model.Employee;
import com.ram.model.Email;
public class App
{
public static void main(String[] args)
{
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
System.out.println("---------------------------------------");
Email email = (Email) context.getBean("email");
System.out.println(email + "\n");
Employee employee = (Employee) context.getBean("employee");
System.out.println(employee);
}
}
Output
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@736e9adb: startup date [Fri Sep 21 09:44:02 IST 2018]; root of context hierarchy
Sep 21, 2018 9:44:02 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Email [emailId=ram@yahoo.com, contentId=100]
Employee [id=10, name=Peter, isValidEmail=true, isValidContentId=true]
Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_Spring%20EL_Regular_exp_Annotation.zip?attredirects=0&d=1
Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_Spring%20EL_Regular_exp_Annotation
Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/41b19a6ea5ff82d0f409d467c69dd68cdbbf4a93/Spring_2018/SpringDemo_Spring%20EL_Regular_exp_Annotation/?at=master
See also:
No comments:
Post a Comment