Learning Netflix Governator - Part 2
Join the DZone community and get the full member experience.
Join For FreeTo continue from the previous entry on some basic learnings on Netflix Governator, here I will cover one more enhancement that Netflix Governatorbrings to Google Guice - Lifecycle Management
Lifecycle Management essentially provides hooks into the different lifecycle phases that an object is taken through, to quote the wiki article on Governator:
Allocation (via Guice) | v Pre Configuration | v Configuration | V Set Resources | V Post Construction | V Validation and Warm Up | V -- application runs until termination, then... -- | V Pre Destroy
To illustrate this, consider the following code:
package sample.gov; import com.google.inject.Inject; import com.netflix.governator.annotations.AutoBindSingleton; import sample.dao.BlogDao; import sample.model.BlogEntry; import sample.service.BlogService; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @AutoBindSingleton(baseClass = BlogService.class) public class DefaultBlogService implements BlogService { private final BlogDao blogDao; @Inject public DefaultBlogService(BlogDao blogDao) { this.blogDao = blogDao; } @Override public BlogEntry get(long id) { return this.blogDao.findById(id); } @PostConstruct public void postConstruct() { System.out.println("Post-construct called!!"); } @PreDestroy public void preDestroy() { System.out.println("Pre-destroy called!!"); } }
Here two methods have been annotated with @PostConstruct and @PreDestroy annotations to hook into these specific phases of the Governator's lifecycle for this object. The neat thing is that these annotations are not Governator specific but are JSR-250 annotations that are now baked into the JDK.
Calling the test for this class appropriately calls the annotated methods, here is a sample test:
mport com.google.inject.Injector; import com.netflix.governator.guice.LifecycleInjector; import com.netflix.governator.lifecycle.LifecycleManager; import org.junit.Test; import sample.service.BlogService; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; public class SampleWithGovernatorTest { @Test public void testExampleBeanInjection() throws Exception { Injector injector = LifecycleInjector .builder() .withModuleClass(SampleModule.class) .usingBasePackages("sample.gov") .build() .createInjector(); LifecycleManager manager = injector.getInstance(LifecycleManager.class); manager.start(); BlogService blogService = injector.getInstance(BlogService.class); assertThat(blogService.get(1l), is(notNullValue())); manager.close(); } }
If you are interested in exploring this further, here is my github project with samples with Lifecycle management.
Published at DZone with permission of Biju Kunjummen, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Microservices With Apache Camel and Quarkus (Part 2)
-
Health Check Response Format for HTTP APIs
-
What ChatGPT Needs Is Context
-
Comparing Cloud Hosting vs. Self Hosting
Comments