Example usage for org.springframework.beans.factory.support DefaultListableBeanFactory setAutowireCandidateResolver

List of usage examples for org.springframework.beans.factory.support DefaultListableBeanFactory setAutowireCandidateResolver

Introduction

In this page you can find the example usage for org.springframework.beans.factory.support DefaultListableBeanFactory setAutowireCandidateResolver.

Prototype

public void setAutowireCandidateResolver(final AutowireCandidateResolver autowireCandidateResolver) 

Source Link

Document

Set a custom autowire candidate resolver for this BeanFactory to use when deciding whether a bean definition should be considered as a candidate for autowiring.

Usage

From source file:ch.nydi.spring.context.support.TestGenericXmlContextLoader.java

/**
 * {@inheritDoc}//ww w.  j  av a2 s  .c o m
 */
@Override
public final ConfigurableApplicationContext loadContext(final String... locations) throws Exception {

    final DefaultListableBeanFactory beanFactory = new PrimaryResolverListableBeanFactory();
    beanFactory.setParameterNameDiscoverer(new LocalVariableTableParameterNameDiscoverer());
    beanFactory.setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());

    final GenericApplicationContext context = new GenericApplicationContext(beanFactory);
    createBeanDefinitionReader(context).loadBeanDefinitions(locations);
    AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
    context.refresh();
    context.registerShutdownHook();
    return context;
}

From source file:org.constretto.spring.EnvironmentAnnotationConfigurer.java

@SuppressWarnings("unchecked")
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory)
        throws BeansException {

    if (!(configurableListableBeanFactory instanceof DefaultListableBeanFactory)) {
        throw new IllegalStateException(
                "EnvironmentAnnotationConfigurer needs to operate on a DefaultListableBeanFactory");
    }//from w  w w  .j  a  v a2s.co m
    DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableListableBeanFactory;
    defaultListableBeanFactory.setAutowireCandidateResolver(new ConstrettoAutowireCandidateResolver());
    String[] beanNames = configurableListableBeanFactory.getBeanDefinitionNames();
    int lowestDiscoveredPriority = Integer.MAX_VALUE;
    for (String beanName : beanNames) {
        BeanDefinition beanDefinition = configurableListableBeanFactory.getBeanDefinition(beanName);
        if (beanDefinition.getBeanClassName() != null) {
            try {
                Class beanClass = Class.forName(beanDefinition.getBeanClassName());
                Environment environmentAnnotation = findEnvironmentAnnotation(beanClass);
                if (environmentAnnotation != null) {
                    if (!assemblyContextResolver.getAssemblyContext().isEmpty()) {
                        boolean autowireCandidate = decideIfAutowireCandiate(beanName, environmentAnnotation);
                        beanDefinition.setAutowireCandidate(autowireCandidate);
                        if (autowireCandidate) {
                            removeNonAnnotatedBeansFromAutowireForType(beanClass,
                                    configurableListableBeanFactory);
                        }
                    } else {
                        beanDefinition.setAutowireCandidate(false);
                    }
                }
            } catch (ClassNotFoundException e) {
                beanDefinition.setAutowireCandidate(false);
            }
        }
    }
}

From source file:org.exoplatform.container.spring.SpringContainer.java

/**
 * {@inheritDoc}//  w  ww  .  j  av a  2  s  .  c o m
 */
@Override
@SuppressWarnings({ "rawtypes", "unchecked" })
public void start() {
    ConfigurationManager cm = super.getComponentInstanceOfType(ConfigurationManager.class, false);
    // We check if the component has been defined in the configuration of the current container
    // The goal is to enable the SpringContainer only if it is needed
    Component component = cm.getComponent(ApplicationContextProvider.class);
    if (component == null) {
        if (LOG.isDebugEnabled()) {
            LOG.debug(
                    "No ApplicationContextProvider has been defined, thus the SpringContainer will be disabled."
                            + " To enable the Spring Integration please define an ApplicationContextProvider");
        }
    } else {
        DefaultListableBeanFactory bf = new DefaultListableBeanFactory();
        bf.setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());
        Collection<ComponentAdapter<?>> adapters = delegate.getComponentAdapters();
        for (ComponentAdapter<?> adapter : adapters) {
            Object key = adapter.getComponentKey();
            String name = keyToBeanName(key);
            String factoryName = name + "#factory";
            RootBeanDefinition def = new RootBeanDefinition(adapter.getComponentImplementation(),
                    AbstractBeanDefinition.AUTOWIRE_NO, false);
            def.setScope(BeanDefinition.SCOPE_PROTOTYPE);
            def.setFactoryBeanName(factoryName);
            def.setFactoryMethodName("getInstance");
            def.setLazyInit(true);
            def.setTargetType(adapter.getComponentImplementation());
            if (key instanceof String) {
                def.addQualifier(new AutowireCandidateQualifier(Named.class, key));
            } else if (key instanceof Class<?> && ((Class<?>) key).isAnnotation()) {
                def.addQualifier(new AutowireCandidateQualifier((Class<?>) key));
            } else {
                def.setPrimary(true);
            }
            bf.registerBeanDefinition(name, def);
            bf.registerSingleton(factoryName, new ComponentAdapterFactoryBean(adapter));
        }
        GenericApplicationContext parentContext = new GenericApplicationContext(bf);
        parentContext.refresh();
        ApplicationContextProvider provider = super.getComponentInstanceOfType(ApplicationContextProvider.class,
                false);
        ctx = provider.getApplicationContext(parentContext);
        LOG.info("A SpringContainer has been enabled using the ApplicationContextProvider "
                + provider.getClass());
    }
    super.start();
}

From source file:com.liferay.arkadiko.bean.AKBeanPostProcessor.java

/**
 * Post process bean factory.//from w w  w  .  jav  a2  s.c  o  m
 *
 * @param beanFactory the bean factory
 * @throws BeansException the beans exception
 */
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    if (!(beanFactory instanceof DefaultListableBeanFactory)) {
        return;
    }

    DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory;

    defaultListableBeanFactory.setInstantiationStrategy(this);

    AutowireCandidateResolver autowireCandidateResolver = defaultListableBeanFactory
            .getAutowireCandidateResolver();

    defaultListableBeanFactory
            .setAutowireCandidateResolver(new AKAutowireCandidateResolver(autowireCandidateResolver));

    for (String beanName : defaultListableBeanFactory.getBeanDefinitionNames()) {

        BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);

        if (!(beanDefinition instanceof AbstractBeanDefinition)) {
            continue;
        }

        String className = beanDefinition.getBeanClassName();

        if (className == null) {
            continue;
        }

        try {
            AKBeanDefinition akBeanDefinition = new AKBeanDefinition(this,
                    (AbstractBeanDefinition) beanDefinition, beanName, getServiceRegistry());

            defaultListableBeanFactory.removeBeanDefinition(beanName);

            defaultListableBeanFactory.registerBeanDefinition(beanName, akBeanDefinition);
        } catch (Exception e) {
            if (_log.isLoggable(Level.SEVERE)) {
                _log.log(Level.SEVERE, e.getMessage(), e);
            }
        }
    }
}

From source file:org.loginject.SpringLogInjectionService.java

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

        @Override/*from  ww w .  j  av a  2s .com*/
        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);
        }
    };
}

From source file:org.openvpms.web.component.im.table.IMObjectTableModelFactory.java

/**
 * Helper to create a new table model./* w w w  .j a v a 2 s . c om*/
 *
 * @param handler    the archetype handler
 * @param shortNames the archetype short names. May be {@code null}
 * @param query      the query. May be {@code null}
 * @param parent     the parent object
 * @param context    the layout context
 * @return a new table model, or {@code null} if there is no valid constructor
 */
@SuppressWarnings("unchecked")
private static <T extends IMObject> IMObjectTableModel<T> construct(
        ArchetypeHandler<IMObjectTableModel<T>> handler, final String[] shortNames, Query<T> query,
        final IMObject parent, LayoutContext context) {
    Class type = handler.getType();
    DefaultListableBeanFactory factory = new DefaultListableBeanFactory();

    // Spring doesn't automatically autowire the shortNames array when it is registered as a singleton, so need to
    // register the following to handle it explicitly
    factory.setAutowireCandidateResolver(new SimpleAutowireCandidateResolver() {
        @Override
        public Object getSuggestedValue(DependencyDescriptor descriptor) {
            if (String[].class.equals(descriptor.getDependencyType())) {
                return shortNames;
            }
            return super.getSuggestedValue(descriptor);
        }
    });
    if (query != null) {
        factory.registerSingleton("query", query);
    }
    if (parent != null) {
        factory.registerSingleton("parent", parent);
    }
    if (context != null) {
        factory.registerSingleton("context", context);
    }
    try {
        IMObjectTableModel<T> result = (IMObjectTableModel<T>) factory.createBean(type,
                AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
        handler.initialise(result);
        return result;
    } catch (Throwable exception) {
        log.error(exception, exception);
    }
    return null;
}

From source file:org.statefulj.framework.core.StatefulFactory.java

public void postProcessBeanFactory(final ConfigurableListableBeanFactory reg) throws BeansException {
    DefaultListableBeanFactory bf = (DefaultListableBeanFactory) reg;
    bf.setAutowireCandidateResolver(new FSMAnnotationResolver());
}