List of usage examples for org.springframework.beans.factory.config BeanPostProcessor BeanPostProcessor
BeanPostProcessor
From source file:org.artifactory.spring.ArtifactoryApplicationContext.java
@Override protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { super.prepareBeanFactory(beanFactory); //Add our own post processor that registers all reloadable beans auto-magically after construction beanFactory.addBeanPostProcessor(new BeanPostProcessor() { @Override/* ww w .j a va 2s. com*/ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { Class<?> targetClass = AopUtils.getTargetClass(bean); if (ReloadableBean.class.isAssignableFrom(targetClass)) { Reloadable annotation; if (targetClass.isAnnotationPresent(Reloadable.class)) { annotation = targetClass.getAnnotation(Reloadable.class); Class<? extends ReloadableBean> beanClass = annotation.beanClass(); addReloadableBean(beanClass); } else { throw new IllegalStateException("Bean " + targetClass.getName() + " requires initialization beans to be initialized, but no such beans were found"); } } return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { //Do nothing return bean; } }); }
From source file:org.springframework.beans.factory.DefaultListableBeanFactoryTests.java
@Test public void testBeanPostProcessorWithWrappedObjectAndDisposableBean() { DefaultListableBeanFactory lbf = new DefaultListableBeanFactory(); RootBeanDefinition bd = new RootBeanDefinition(BeanWithDisposableBean.class); lbf.registerBeanDefinition("test", bd); lbf.addBeanPostProcessor(new BeanPostProcessor() { @Override/*from ww w . j a v a 2 s. c om*/ public Object postProcessBeforeInitialization(Object bean, String beanName) { return new TestBean(); } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { return bean; } }); BeanWithDisposableBean.closed = false; lbf.preInstantiateSingletons(); lbf.destroySingletons(); assertTrue("Destroy method invoked", BeanWithDisposableBean.closed); }
From source file:org.springframework.beans.factory.DefaultListableBeanFactoryTests.java
@Test public void testBeanPostProcessorWithWrappedObjectAndCloseable() { DefaultListableBeanFactory lbf = new DefaultListableBeanFactory(); RootBeanDefinition bd = new RootBeanDefinition(BeanWithCloseable.class); lbf.registerBeanDefinition("test", bd); lbf.addBeanPostProcessor(new BeanPostProcessor() { @Override/*from www . j a va2 s.co m*/ public Object postProcessBeforeInitialization(Object bean, String beanName) { return new TestBean(); } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { return bean; } }); BeanWithDisposableBean.closed = false; lbf.preInstantiateSingletons(); lbf.destroySingletons(); assertTrue("Destroy method invoked", BeanWithCloseable.closed); }
From source file:org.springframework.beans.factory.DefaultListableBeanFactoryTests.java
@Test public void testBeanPostProcessorWithWrappedObjectAndDestroyMethod() { DefaultListableBeanFactory lbf = new DefaultListableBeanFactory(); RootBeanDefinition bd = new RootBeanDefinition(BeanWithDestroyMethod.class); bd.setDestroyMethodName("close"); lbf.registerBeanDefinition("test", bd); lbf.addBeanPostProcessor(new BeanPostProcessor() { @Override//from w w w .ja va 2 s .com public Object postProcessBeforeInitialization(Object bean, String beanName) { return new TestBean(); } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { return bean; } }); BeanWithDestroyMethod.closeCount = 0; lbf.preInstantiateSingletons(); lbf.destroySingletons(); assertEquals("Destroy methods invoked", 1, BeanWithDestroyMethod.closeCount); }
From source file:org.springframework.cloud.stream.metrics.config.BinderMetricsAutoConfiguration.java
/** * Postprocessor for installing the {@link ApplicationMetricsExporter} as an * exporter under the name {@code application}. * @param endpoint the metrics endpoint (lazy reference to prevent early initialization) * @param emitter the emitter bound interface * @param properties application metrics properties * @return/*from w ww. j a v a2 s . c om*/ */ @Bean public static BeanPostProcessor metricExportersBeanPostProcessor(final @Lazy MetricsEndpoint endpoint, final Emitter emitter, final ApplicationMetricsProperties properties) { return new BeanPostProcessor() { @Override public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException { return bean; } @Override public Object postProcessAfterInitialization(Object bean, String name) throws BeansException { if (bean instanceof MetricExporters) { Map<String, Exporter> exporters = ((MetricExporters) bean).getExporters(); if (!exporters.containsKey(APPLICATION_METRICS_EXPORTER_TRIGGER_NAME)) { exporters.put(APPLICATION_METRICS_EXPORTER_TRIGGER_NAME, new ApplicationMetricsExporter(endpoint, emitter.applicationMetrics(), properties)); } else { log.warn("Could not register ApplicationMetricExporter: " + exporters.get(APPLICATION_METRICS_EXPORTER_TRIGGER_NAME) + " was already registered as " + APPLICATION_METRICS_EXPORTER_TRIGGER_NAME); } } return bean; } }; }