为了继续上一篇有关Netflix Governator的一些基础知识的文章,在这里,我将介绍Netflix Governator带给Google Guice的另一项增强功能–生命周期管理
生命周期管理本质上提供了进入对象所经历的不同生命周期阶段的钩子,以引用有关Governor的Wiki文章 :
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
为了说明这一点,请考虑以下代码:
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;@Injectpublic DefaultBlogService(BlogDao blogDao) {this.blogDao = blogDao;}@Overridepublic BlogEntry get(long id) {return this.blogDao.findById(id);}@PostConstructpublic void postConstruct() {System.out.println("Post-construct called!!");}@PreDestroypublic void preDestroy() {System.out.println("Pre-destroy called!!");}
}
在这里,已使用@PostConstruct和@PreDestroy批注对两种方法进行了注释,以挂钩到此对象的管理者生命周期的这些特定阶段。 整洁的是,这些批注不是特定于Governator的,而是JSR-250批注,现在已将其添加到JDK中。
对该类调用测试将适当地调用带注释的方法,这是一个示例测试:
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 {@Testpublic 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();}}
长期以来,Spring Framework一直支持类似的机制 -因此,基于完全相同的基于JSR-250的注释也适用于Spring bean。
如果您有兴趣进一步探索它, 这是我的GitHub项目,其中包含带有生命周期管理的示例。
翻译自: https://www.javacodegeeks.com/2015/01/learning-netflix-governator-part-2.html