springproxyableobjectfactory.java

来自「在Struts2中的jar包xwork的源代码.版本为2.0.7」· Java 代码 · 共 85 行

JAVA
85
字号
/* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */package com.opensymphony.xwork2.spring;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.factory.NoSuchBeanDefinitionException;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.beans.factory.support.RootBeanDefinition;import org.springframework.context.ApplicationContext;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * SpringProxyableObjectFactory. * * @author Jason Carreira */public class SpringProxyableObjectFactory extends SpringObjectFactory {        private static final Log log = LogFactory.getLog(SpringProxyableObjectFactory.class);    private List skipBeanNames = new ArrayList();    public Object buildBean(String beanName, Map extraContext) throws Exception {        if (log.isDebugEnabled()) {            log.debug("Building bean for name " + beanName);        }        if (!skipBeanNames.contains(beanName)) {            ApplicationContext anAppContext = getApplicationContext(extraContext);            try {                if (log.isDebugEnabled()) {                    log.debug("Trying the application context... appContext = " + anAppContext + ",\n bean name = " + beanName);                }                return anAppContext.getBean(beanName);            } catch (NoSuchBeanDefinitionException e) {                if (log.isDebugEnabled()) {                    log.debug("Did not find bean definition for bean named " + beanName + ", creating a new one...");                }                if (autoWiringFactory instanceof BeanDefinitionRegistry) {                    try {                        Class clazz = Class.forName(beanName);                        BeanDefinitionRegistry registry = (BeanDefinitionRegistry) autoWiringFactory;                        RootBeanDefinition def = new RootBeanDefinition(clazz, autowireStrategy);                        def.setSingleton(false);                         if (log.isDebugEnabled()) {                            log.debug("Registering a new bean definition for class " + beanName);                        }                        registry.registerBeanDefinition(beanName,def);                        try {                            return anAppContext.getBean(beanName);                        } catch (NoSuchBeanDefinitionException e2) {                            log.warn("Could not register new bean definition for bean " + beanName);                            skipBeanNames.add(beanName);                        }                    } catch (ClassNotFoundException e1) {                        skipBeanNames.add(beanName);                    }                }            }        }        if (log.isDebugEnabled()) {            log.debug("Returning autowired instance created by default ObjectFactory");        }        return autoWireBean(super.buildBean(beanName, extraContext), autoWiringFactory);    }    /**     * Subclasses may override this to return a different application context.     * Note that this application context should see any changes made to the     * <code>autoWiringFactory</code>, so the application context should be either     * the original or a child context of the original.     *     * @param context  provided context.     */    protected ApplicationContext getApplicationContext(Map context) {        return appContext;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?