Example usage for org.springframework.context.annotation ContextAnnotationAutowireCandidateResolver ContextAnnotationAutowireCandidateResolver

List of usage examples for org.springframework.context.annotation ContextAnnotationAutowireCandidateResolver ContextAnnotationAutowireCandidateResolver

Introduction

In this page you can find the example usage for org.springframework.context.annotation ContextAnnotationAutowireCandidateResolver ContextAnnotationAutowireCandidateResolver.

Prototype

ContextAnnotationAutowireCandidateResolver

Source Link

Usage

From source file:org.loginject.SpringLogInjectionService.java

@Override
public BeanFactoryPostProcessor getBindings(LogInject<_Logger_> logInject) {
    return new BeanFactoryPostProcessor() {
        ThreadLocal<Object> injectee = new ThreadLocal<>();

        @Override//from w  ww .  j a  v  a 2  s.  c  o  m
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory;
            AutowireCandidateResolver resolver = new ContextAnnotationAutowireCandidateResolver() {
                @Override
                public Object getSuggestedValue(DependencyDescriptor descriptor) {
                    if (descriptor.getDependencyType().equals(logInject.getLoggerClass())) {
                        return logInject.createLogger(injectee.get().getClass());
                    }
                    return null;
                }
            };
            AutowiredAnnotationBeanPostProcessor beanPostProcessor = new AutowiredAnnotationBeanPostProcessor() {
                @Override
                public PropertyValues postProcessPropertyValues(PropertyValues values,
                        PropertyDescriptor[] descriptors, Object bean, String beanName) throws BeansException {
                    injectee.set(bean);
                    return super.postProcessPropertyValues(values, descriptors, bean, beanName);
                }
            };
            beanPostProcessor.setBeanFactory(defaultListableBeanFactory);
            defaultListableBeanFactory.addBeanPostProcessor(beanPostProcessor);
            defaultListableBeanFactory.setAutowireCandidateResolver(resolver);
        }
    };
}