Example usage for org.springframework.beans.factory.config BeanPostProcessor BeanPostProcessor

List of usage examples for org.springframework.beans.factory.config BeanPostProcessor BeanPostProcessor

Introduction

In this page you can find the example usage for org.springframework.beans.factory.config BeanPostProcessor BeanPostProcessor.

Prototype

BeanPostProcessor

Source Link

Usage

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;
        }
    };
}