Example usage for org.springframework.beans.factory.support InstantiationStrategy instantiate

List of usage examples for org.springframework.beans.factory.support InstantiationStrategy instantiate

Introduction

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

Prototype

Object instantiate(RootBeanDefinition bd, @Nullable String beanName, BeanFactory owner) throws BeansException;

Source Link

Document

Return an instance of the bean with the given name in this factory.

Usage

From source file:co.paralleluniverse.common.spring.SpringContainerHelper.java

/**
 * adds hooks to capture autowired constructor args and add them as dependencies
 *
 * @return//from  w  w  w. j  a v a2  s  .  c o m
 */
private static DefaultListableBeanFactory createBeanFactory() {
    return new DefaultListableBeanFactory() {
        {
            final InstantiationStrategy is = getInstantiationStrategy();
            setInstantiationStrategy(new InstantiationStrategy() {
                @Override
                public Object instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner)
                        throws BeansException {
                    return is.instantiate(beanDefinition, beanName, owner);
                }

                @Override
                public Object instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner,
                        Constructor<?> ctor, Object[] args) throws BeansException {
                    final Object bean = is.instantiate(beanDefinition, beanName, owner, ctor, args);
                    addDependencies(bean, args);
                    return bean;
                }

                @Override
                public Object instantiate(RootBeanDefinition beanDefinition, String beanName, BeanFactory owner,
                        Object factoryBean, Method factoryMethod, Object[] args) throws BeansException {
                    final Object bean = is.instantiate(beanDefinition, beanName, owner, factoryBean,
                            factoryMethod, args);
                    addDependencies(bean, args);
                    return bean;
                }
            });
        }

        private void addDependencies(Object bean, Object[] args) {
            if (bean instanceof Service) {
                for (Object arg : args) {
                    if (arg instanceof Service) {
                        ((Service) arg).addDependedBy((Service) bean);
                        ((Service) bean).addDependsOn((Service) arg);
                    }
                }
            }
        }
    };
}