Example usage for org.springframework.beans.factory.config BeanDefinition isPrototype

List of usage examples for org.springframework.beans.factory.config BeanDefinition isPrototype

Introduction

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

Prototype

boolean isPrototype();

Source Link

Document

Return whether this a Prototype, with an independent instance returned for each call.

Usage

From source file:de.contentreich.instrumentation.SpringBeansHelper.java

public List<String[]> getSpringBeans(ApplicationContext appContext, String parentId) {
    logger.debug("Get spring beans for context " + parentId);
    ArrayList<String[]> beans = new ArrayList<String[]>();
    String[] names = appContext.getBeanDefinitionNames();
    for (int i = 0; i < names.length; i++) {
        String beanName = names[i];
        DefaultListableBeanFactory beanFactory = getBeanFactory(appContext);
        Class clazz = getBeanClass(beanName, beanFactory);
        // DefaultListableBeanFactory beanFactory = (appContext instanceof DefaultListableBeanFactory) ? (DefaultListableBeanFactory) appContext : null;
        if (clazz != null && beanFactory != null) { // Not abstract
            BeanDefinition def = beanFactory.getBeanDefinition(beanName);
            if (!(def.isPrototype() || def.isLazyInit())) {
                Object bean = appContext.getBean(beanName);
                if (holdsChildApplicationContext(bean)) {
                    // Semantically not perfect but ok ;)
                    clazz = getApplicationContext(bean).getClass();
                }//from ww  w . j a v  a 2  s .  c om
            }
            String[] beanEntry = new String[] { beanName, clazz.getName(), parentId };
            beans.add(beanEntry);
        }
    }
    Collections.sort(beans, new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            String s1 = ((String[]) o1)[0];
            String s2 = ((String[]) o2)[0];
            return s1.compareTo(s2);
        }

    });
    logger.debug("Got " + beans.size() + " spring beans");
    return beans;
}

From source file:org.jdal.aop.SerializableProxyUtils.java

public static BeanDefinitionHolder createSerializableProxy(BeanDefinitionHolder definition,
        BeanDefinitionRegistry registry, boolean proxyTargetClass) {

    String originalBeanName = definition.getBeanName();
    BeanDefinition targetDefinition = definition.getBeanDefinition();

    // Create a scoped proxy definition for the original bean name,
    // "hiding" the target bean in an internal target definition.
    RootBeanDefinition proxyDefinition = new RootBeanDefinition(SerializableProxyFactoryBean.class);
    proxyDefinition.setOriginatingBeanDefinition(definition.getBeanDefinition());
    proxyDefinition.setSource(definition.getSource());
    proxyDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);

    String targetBeanName = getTargetBeanName(originalBeanName);
    proxyDefinition.getPropertyValues().add("targetBeanName", targetBeanName);

    if (proxyTargetClass) {
        targetDefinition.setAttribute(AutoProxyUtils.PRESERVE_TARGET_CLASS_ATTRIBUTE, Boolean.TRUE);
    } else {//from   ww  w  .j a  v a 2  s. com
        proxyDefinition.getPropertyValues().add("proxyTargetClass", Boolean.FALSE);
    }

    // Copy autowire settings from original bean definition.
    proxyDefinition.setAutowireCandidate(targetDefinition.isAutowireCandidate());
    proxyDefinition.setPrimary(targetDefinition.isPrimary());
    if (targetDefinition instanceof AbstractBeanDefinition) {
        proxyDefinition.copyQualifiersFrom((AbstractBeanDefinition) targetDefinition);
    }

    // Set singleton property of FactoryBean
    proxyDefinition.getPropertyValues().add("singleton", !targetDefinition.isPrototype());

    // The target bean should be ignored in favor of the scoped proxy.
    targetDefinition.setAutowireCandidate(false);
    targetDefinition.setPrimary(false);

    // Register the target bean as separate bean in the factory.
    registry.registerBeanDefinition(targetBeanName, targetDefinition);

    // Return the scoped proxy definition as primary bean definition
    // (potentially an inner bean).
    return new BeanDefinitionHolder(proxyDefinition, originalBeanName, definition.getAliases());
}