Friday, April 19, 2024
HomeJavaWhat's @Conditional annotation in Spring Framework? Instance Tutorial

What’s @Conditional annotation in Spring Framework? Instance Tutorial


Howdy guys, if you wish to know what’s @Conditional annotation in Spring Framework and Spring Boot, and how you can use it then you might have come to the fitting place. Earlier, I’ve shared greatest free programs to be taught Spring Framework and Spring Boot, and on this article, you will be taught what they’re, how you can use them with sensible examples. Spring 4.0 launched the @Conditional annotation that’s used for conditional checking for bean registration. This annotation gives extra assist than the @Profile annotation supplied by the spring framework and many of the Spring Boot matching is attributed to this annotation. It lets you setup options primarily based upon sure situations like presence of a category in classparth or a JAR File which is how Spring Boot Auto-configuration works.

Nearly all of @Conditional annotation customers are,

  • Circumstances primarily based on Bean definition or object current within the software.
  • Circumstances primarily based on user-defined methods

So on this tutorial, you’ll learn to use predefined conditional annotations, mix them with totally different situations in addition to create our customized, condition-based annotations.

Java builders have to have a separate class that implements the Situation interface. Principally, the interface has matches() technique and the appliance’s situation inside this technique.

1. What’s Conditional Interface in Spring Framework?

From the Spring API Doc, situation interface is a single situation have to be maintained to ensure that a part to be registered.

Circumstances are checked instantly earlier than the bean definition is because of be registered and are free to veto registration primarily based on any standards that may be decided at that time.

Circumstances should observe the identical restrictions as BeanFactoryPostProcessor and take care to by no means work together with bean cases. For extra fine-grained management of situations that work together with @Configuration beans contemplate the ConfigurationCondition interface.

Allow us to see a straightforward code snippet to grasp this interface,

public class ConditionClass implements Situation {

@Override
public boolean matches(last ConditionContext context,
                       last AnnotatedTypeMetadata metadata) {
  return true;
 }
}

2. Spring @Conditional Annotation Instance

As an example you solely need to assemble a bean if a sure situation is current within the property file; in any other case, you do not need to create it. The @Conditional annotation can be utilized to create the bean in a conditional method. 

So I’ll make a challenge to show the @Conditional annotation.

What is @Conditional annotations in Spring Framework? Example Tutorial

On this instance, we aren’t going to retailer the values in any database. So solely used the spring-boot-starter dependency as proven within the following pom.xml file.

<?xml model="1.0" encoding="UTF-8"?>

<challenge xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                    https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<dad or mum>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<model>2.5.2</model>

<relativePath/> <!-- lookup dad or mum from repository -->

</dad or mum>

<groupId>com.instance</groupId>

<artifactId>studentproject</artifactId>

<model>0.0.1-SNAPSHOT</model>

<title>studentproject</title>

<description>Demo challenge for Spring Boot</description>

<properties>

<java.model>11</java.model>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>



<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>take a look at</scope>

</dependency>

</dependencies>

<construct>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</construct>

</challenge>

StudentBean class

That is an empty bean class to indicate you the method.

public class StudentBean {

 non-public String title;
 public String getName() {
  return title;
 }

public void setName(String title) {
  this.title = title;
  }
}

3. TestBeanCondition Class

That is the category that implements the Situation interface and supplies the situation for creating the StudentBean. As you’ll be able to see within the matches technique it checks if the setting comprises the property “scholar”.

import org.springframework.context.annotation.Situation;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Setting;
import org.springframework.core.sort.AnnotatedTypeMetadata;

public class StudentBeanCondition implements Situation {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
   Setting setting = context.getEnvironment();
   return setting.containsProperty("scholar");
  }
}

4. StudentBeanConfig class

That is the category the place TestBean is created, you’ll be able to see the @Conditional annotation used right here with the category that gives the situation.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource(worth="classpath:config/take a look at.properties", ignoreResourceNotFound=true)
public class StudentBeanConfig {

@Bean
@Conditional(StudentBeanCondition.class)
public StudentBean studentBean() {
    System.out.println("scholar bean creation");
    return new StudentBean();
  }
}

5. Check the code

Then take a look at the code utilizing the beneath code snippet.

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class StudentApplication {

public static void primary( String[] args ){
  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext
(StudentBeanConfig.class);

  StudentBean sb = (StudentBean)context.getBean("studnetBean");
  sb.setName("Angela");
  System.out.println("" + sb.getName());
  context.shut();
  }
}

Output

If every thing goes nicely, the code reveals the bean with the testing quotes and the scholar title.

That is all about what’s @Conditional annotation in Spring and How one can use it. The @Conditional annotation receives a category title that implements the Situation interface and creates the bean if that situation is matched.

If the situation you are looking for to construct is merely the inverse of one other situation, you’ll be able to prolong from it and override the matches technique because the inverse of executing the dad or mum class’s matches technique.

You could expressly outline the situation. Spring will register the bean and add it to the appliance context if these situations are met. That’s all for this tutorial and I hope the article served you no matter you had been searching for. 

Completely happy Studying and don’t forget to share!

Different Spring Framework Articles and Assets you could like:

Thanks for studying this text to date, should you discover this Spring @Conditional examples helpful then please share them with your folks and colleagues. When you’ve got any questions or suggestions, please drop a be aware. 

P. S. – In case you are new to Spring Framework and need to be taught Spring Framework in depth and searching for greatest sources like on-line programs then you can even checkout this checklist of greatest Spring Framework programs for Java programmers to grasp Spring Framework and Spring Boot in depth. 
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments