Spring Java Configuration
07 Apr 2020
1. Lets start from pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.sergpank</groupId>
<artifactId>spring-java-config</artifactId>
<version>1.0-SNAPSHOT</version>
<name>spring-java-config</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.18.RELEASE</version> <!-- I use Spring 3 because on my job we can't migrate from this sh!t -->
</dependency>
</dependencies>
</project>
2. Create some sample java classes:
// MessageProvider Interface:
package io.github.sergpank;
public interface MessageProvider {
public String getMessage();
}
// ConfigurableMessageProvider Class:
package io.github.sergpank;
public class ConfigurableMessageProvider implements MessageProvider {
private String message = "Default message";
public ConfigurableMessageProvider() {
}
public ConfigurableMessageProvider(String message) {
this.message = message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
}
// MessageRenderer Interface:
package io.github.sergpank;
public interface MessageRenderer {
void render();
void setMessageProvider(MessageProvider messageProvider);
MessageProvider getMessageProvider();
}
// SysoutMessageRenderer Class:
package io.github.sergpank;
public class SysoutMessageRenderer implements MessageRenderer {
private MessageProvider messageProvider;
@Override
public void render() {
System.out.println(messageProvider.getMessage());
}
@Override
public void setMessageProvider(MessageProvider messageProvider) {
this.messageProvider = messageProvider;
}
@Override
public MessageProvider getMessageProvider() {
return messageProvider;
}
}
3. Create Java Configuration (@Configuration):
package io.github.sergpank.config;
import io.github.sergpank.ConfigurableMessageProvider;
import io.github.sergpank.MessageProvider;
import io.github.sergpank.MessageRenderer;
import io.github.sergpank.SysoutMessageRenderer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SimpleJavaConfig {
@Bean
public MessageProvider messageProvider() {
System.out.println("---> init message provider");
return new ConfigurableMessageProvider("Java config example");
}
@Bean
MessageRenderer messageRenderer() {
System.out.println("---> init message renderer");
SysoutMessageRenderer renderer = new SysoutMessageRenderer();
renderer.setMessageProvider(messageProvider());
return renderer;
}
}
4. Verify that everything works fine:
package io.github.sergpank.app;
import io.github.sergpank.MessageRenderer;
import io.github.sergpank.config.SimpleJavaConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class AppJAVA {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SimpleJavaConfig.class);
MessageRenderer renderer = ctx.getBean("messageRenderer", MessageRenderer.class);
renderer.render();
}
}
// ---> init message renderer
// ---> init message provider
// Java config example