@PostConstruct annotation is applied on a method that needs to be executed after dependency injection is done to perform any initialization. This method must be invoked before the class is put into service. This annotation is supported on all classes that support dependency injection.
Example
@Singleton
public class AppConfig {
@Inject
EmbeddedServer embeddedServer;
@PostConstruct
public void postConstructMethod() {
System.out.println("host : " + embeddedServer.getHost());
System.out.println("port : " + embeddedServer.getPort());
}
public void sayHi() {
System.out.println("Hi!!!!!!!!!!!");
}
}
Find the below working application.
Step 1: Create new maven project ‘micronaut-rest-postconstruct’.
Step 2: Update pom.xml with maven dependencies.
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>com.sample.app</groupId>
<artifactId>micronaut-rest-postconstruct</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<parent>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-parent</artifactId>
<version>3.7.4</version>
</parent>
<properties>
<packaging>jar</packaging>
<jdk.version>11</jdk.version>
<release.version>11</release.version>
<micronaut.version>3.7.3</micronaut.version>
<micronaut.runtime>netty</micronaut.runtime>
<exec.mainClass>com.sample.app.App</exec.mainClass>
</properties>
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-inject</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-validation</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-client</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-server-netty</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-jackson-databind</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.micronaut.test</groupId>
<artifactId>micronaut-test-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.micronaut.build</groupId>
<artifactId>micronaut-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- Uncomment to enable incremental compilation -->
<!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->
<annotationProcessorPaths
combine.children="append">
<path>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-validation</artifactId>
<version>${micronaut.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>
Step 3: Define AppConfig class.
AppConfig.java
package com.sample.app.config;
import io.micronaut.runtime.server.EmbeddedServer;
import jakarta.annotation.PostConstruct;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
@Singleton
public class AppConfig {
@Inject
EmbeddedServer embeddedServer;
@PostConstruct
public void postConstructMethod() {
System.out.println("host : " + embeddedServer.getHost());
System.out.println("port : " + embeddedServer.getPort());
}
public void sayHi() {
System.out.println("Hi!!!!!!!!!!!");
}
}
Step 4: Define WelcomeController class.
WelcomeController.java
package com.sample.app.controller;
import com.sample.app.config.AppConfig;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import jakarta.inject.Inject;
@Controller("/welcome")
public class WelcomeController {
@Inject
private AppConfig appConfig;
@Get(produces = MediaType.TEXT_PLAIN)
public String index() {
return "Welcome to Micronaut app!!!!";
}
}
Step 4: Define main application class.
App.java
package com.sample.app;
import io.micronaut.runtime.Micronaut;
public class App {
public static void main(String[] args) {
Micronaut.run(App.class);
// Use this if you want the beans to be initialized eagerly
/*Micronaut.build(args)
.eagerInitSingletons(true)
.mainClass(App.class)
.start();*/
}
}
Total project structure looks like below.
Build the project using mvn package command.
Navigate to the folder where pom.xml is located and execute the command ‘mvn package’.
Upon command successful execution, you can see the jar file ‘micronaut-rest-postconstruct-0.1.jar’ in project target folder.
$ls ./target
classes
generated-sources
generated-test-sources
maven-archiver
maven-status
micronaut-rest-postconstruct-0.1.jar
original-micronaut-rest-postconstruct-0.1.jar
test-classes
Execute below command to run the application.
java -jar ./target/micronaut-rest-postconstruct-0.1.jar
When you start the application, you won't see the messages of PostConstruct method to standard out because the service bean are initialized eagerly by default. Send a request to http://localhost:8080/welcome and then you will see the below messages printed to stdout.
host : localhost port : 8080
You can download this application from this link.
No comments:
Post a Comment