前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[ 成为架构师系列 ] 5. Spring Bean 的生命周期 (the standard bean lifecycle)

[ 成为架构师系列 ] 5. Spring Bean 的生命周期 (the standard bean lifecycle)

作者头像
一个会写诗的程序员
发布2019-12-03 17:29:45
4860
发布2019-12-03 17:29:45
举报

[ 成为架构师系列 ] 5. Spring Bean 的生命周期

AbstractXmlApplicationContext

代码语言:javascript
复制
/*
 * Copyright 2002-2017 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context.support;

import java.io.IOException;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.ResourceEntityResolver;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;

/**
 * Convenient base class for {@link org.springframework.context.ApplicationContext}
 * implementations, drawing configuration from XML documents containing bean definitions
 * understood by an {@link org.springframework.beans.factory.xml.XmlBeanDefinitionReader}.
 *
 * <p>Subclasses just have to implement the {@link #getConfigResources} and/or
 * the {@link #getConfigLocations} method. Furthermore, they might override
 * the {@link #getResourceByPath} hook to interpret relative paths in an
 * environment-specific fashion, and/or {@link #getResourcePatternResolver}
 * for extended pattern resolution.
 *
 * @author Rod Johnson
 * @author Juergen Hoeller
 * @see #getConfigResources
 * @see #getConfigLocations
 * @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader
 */
public abstract class AbstractXmlApplicationContext extends AbstractRefreshableConfigApplicationContext {

    private boolean validating = true;


    /**
     * Create a new AbstractXmlApplicationContext with no parent.
     */
    public AbstractXmlApplicationContext() {
    }

    /**
     * Create a new AbstractXmlApplicationContext with the given parent context.
     * @param parent the parent context
     */
    public AbstractXmlApplicationContext(@Nullable ApplicationContext parent) {
        super(parent);
    }


    /**
     * Set whether to use XML validation. Default is {@code true}.
     */
    public void setValidating(boolean validating) {
        this.validating = validating;
    }


    /**
     * Loads the bean definitions via an XmlBeanDefinitionReader.
     * @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader
     * @see #initBeanDefinitionReader
     * @see #loadBeanDefinitions
     */
    @Override
    protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {
        // Create a new XmlBeanDefinitionReader for the given BeanFactory.
        XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

        // Configure the bean definition reader with this context's
        // resource loading environment.
        beanDefinitionReader.setEnvironment(this.getEnvironment());
        beanDefinitionReader.setResourceLoader(this);
        beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));

        // Allow a subclass to provide custom initialization of the reader,
        // then proceed with actually loading the bean definitions.
        initBeanDefinitionReader(beanDefinitionReader);
        loadBeanDefinitions(beanDefinitionReader);
    }

    /**
     * Initialize the bean definition reader used for loading the bean
     * definitions of this context. Default implementation is empty.
     * <p>Can be overridden in subclasses, e.g. for turning off XML validation
     * or using a different XmlBeanDefinitionParser implementation.
     * @param reader the bean definition reader used by this context
     * @see org.springframework.beans.factory.xml.XmlBeanDefinitionReader#setDocumentReaderClass
     */
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
        reader.setValidating(this.validating);
    }

    /**
     * Load the bean definitions with the given XmlBeanDefinitionReader.
     * <p>The lifecycle of the bean factory is handled by the {@link #refreshBeanFactory}
     * method; hence this method is just supposed to load and/or register bean definitions.
     * @param reader the XmlBeanDefinitionReader to use
     * @throws BeansException in case of bean registration errors
     * @throws IOException if the required XML document isn't found
     * @see #refreshBeanFactory
     * @see #getConfigLocations
     * @see #getResources
     * @see #getResourcePatternResolver
     */
    protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {
        Resource[] configResources = getConfigResources();
        if (configResources != null) {
            reader.loadBeanDefinitions(configResources);
        }
        String[] configLocations = getConfigLocations();
        if (configLocations != null) {
            reader.loadBeanDefinitions(configLocations);
        }
    }

    /**
     * Return an array of Resource objects, referring to the XML bean definition
     * files that this context should be built with.
     * <p>The default implementation returns {@code null}. Subclasses can override
     * this to provide pre-built Resource objects rather than location Strings.
     * @return an array of Resource objects, or {@code null} if none
     * @see #getConfigLocations()
     */
    @Nullable
    protected Resource[] getConfigResources() {
        return null;
    }

}

IDEA 自动生成类图 UML:

Alt + Shift + Command + U

Bean factory implementations should support the standard bean lifecycle interfaces as far as possible. The full set of initialization methods and their standard order is:

示例代码

代码语言:javascript
复制
    private static void withSpringApplicationContext() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        HelloService helloService = (HelloService) applicationContext.getBean("helloService");

        System.out.println(applicationContext);
        System.out.println(helloService);

        String s1 = helloService.service1("Jack");
        String s2 = helloService.service2("Jobs");
        System.out.println(s1);
        System.out.println(s2);
    }

其中, HelloServiceImpl 代码如下:

代码语言:javascript
复制
package com.light.sword.service;

import com.alibaba.fastjson.JSON;
import com.light.sword.dao.HelloDao;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*;
import org.springframework.context.*;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.util.StringValueResolver;

/**
 * @author: Jack
 * 2019-11-25 23:09
 */
public class HelloServiceImpl implements HelloService,
    BeanNameAware,
    BeanClassLoaderAware,
    BeanFactoryAware,
    EnvironmentAware,
    EmbeddedValueResolverAware,
    ResourceLoaderAware,
    ApplicationEventPublisherAware,
    MessageSourceAware,
    ApplicationContextAware {
    // 依赖注入的思想,就是把这句代码放到容器中单独管理,而不是写死在代码里.
    // private HelloDao helloDao = new HelloDaoImpl();
    private HelloDao helloDao;

    public HelloDao getHelloDao() {
        return helloDao;
    }

    public void setHelloDao(HelloDao helloDao) {
        this.helloDao = helloDao;
    }

    @Override
    public String service1(String name) {
        return helloDao.say(name);
    }

    @Override
    public String service2(String name) {
        return helloDao.say("$" + name);
    }

    /**
     * Callback that supplies the bean {@link ClassLoader class loader} to
     * a bean instance.
     * <p>Invoked <i>after</i> the population of normal bean properties but
     * <i>before</i> an initialization callback such as
     * {@link InitializingBean InitializingBean's}
     * {@link InitializingBean#afterPropertiesSet()}
     * method or a custom init-method.
     *
     * @param classLoader the owning class loader
     */
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        print("setBeanClassLoader");
        printlnJson(classLoader);
    }

    /**
     * Callback that supplies the owning factory to a bean instance.
     * <p>Invoked after the population of normal bean properties
     * but before an initialization callback such as
     * {@link InitializingBean#afterPropertiesSet()} or a custom init-method.
     *
     * @param beanFactory owning BeanFactory (never {@code null}).
     *                    The bean can immediately call methods on the factory.
     * @throws BeansException in case of initialization errors
     * @see BeanInitializationException
     */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        print("setBeanFactory:");
        printlnJson(beanFactory);
    }

    /**
     * Set the name of the bean in the bean factory that created this bean.
     * <p>Invoked after population of normal bean properties but before an
     * init callback such as {@link InitializingBean#afterPropertiesSet()}
     * or a custom init-method.
     *
     * @param name the name of the bean in the factory.
     *             Note that this name is the actual bean name used in the factory, which may
     *             differ from the originally specified name: in particular for inner bean
     *             names, the actual bean name might have been made unique through appending
     *             "#..." suffixes. Use the {@link BeanFactoryUtils#originalBeanName(String)}
     *             method to extract the original bean name (without suffix), if desired.
     */
    @Override
    public void setBeanName(String name) {
        print("setBeanName:");
        printlnJson(name);
    }

    /**
     * Set the ApplicationContext that this object runs in.
     * Normally this call will be used to initialize the object.
     * <p>Invoked after population of normal bean properties but before an init callback such
     * as {@link InitializingBean#afterPropertiesSet()}
     * or a custom init-method. Invoked after {@link ResourceLoaderAware#setResourceLoader},
     * {@link ApplicationEventPublisherAware#setApplicationEventPublisher} and
     * {@link MessageSourceAware}, if applicable.
     *
     * @param applicationContext the ApplicationContext object to be used by this object
     * @throws ApplicationContextException in case of context initialization errors
     * @throws BeansException              if thrown by application context methods
     * @see BeanInitializationException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        print("setApplicationContext:");
        printlnJson(applicationContext);
    }

    /**
     * Set the ApplicationEventPublisher that this object runs in.
     * <p>Invoked after population of normal bean properties but before an init
     * callback like InitializingBean's afterPropertiesSet or a custom init-method.
     * Invoked before ApplicationContextAware's setApplicationContext.
     *
     * @param applicationEventPublisher event publisher to be used by this object
     */
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        print("setApplicationEventPublisher:");
        printlnJson(applicationEventPublisher);
    }

    /**
     * Set the StringValueResolver to use for resolving embedded definition values.
     *
     * @param resolver
     */
    @Override
    public void setEmbeddedValueResolver(StringValueResolver resolver) {
        print("setEmbeddedValueResolver:");
        printlnJson(resolver);
    }

    /**
     * Set the {@code Environment} that this component runs in.
     *
     * @param environment
     */
    @Override
    public void setEnvironment(Environment environment) {
        print("setEnvironment:");
        printlnJson(environment);
    }

    /**
     * Set the MessageSource that this object runs in.
     * <p>Invoked after population of normal bean properties but before an init
     * callback like InitializingBean's afterPropertiesSet or a custom init-method.
     * Invoked before ApplicationContextAware's setApplicationContext.
     *
     * @param messageSource message source to be used by this object
     */
    @Override
    public void setMessageSource(MessageSource messageSource) {
        print("setMessageSource:");
        printlnJson(messageSource);
    }

    /**
     * Set the ResourceLoader that this object runs in.
     * <p>This might be a ResourcePatternResolver, which can be checked
     * through {@code instanceof ResourcePatternResolver}. See also the
     * {@code ResourcePatternUtils.getResourcePatternResolver} method.
     * <p>Invoked after population of normal bean properties but before an init callback
     * like InitializingBean's {@code afterPropertiesSet} or a custom init-method.
     * Invoked before ApplicationContextAware's {@code setApplicationContext}.
     *
     * @param resourceLoader the ResourceLoader object to be used by this object
     * @see ResourcePatternResolver
     * @see ResourcePatternUtils#getResourcePatternResolver
     */
    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        print("setResourceLoader:");
        printlnJson(resourceLoader);
    }

    void print(Object obj) {
        System.out.print(obj);
    }

    void printlnJson(Object obj) {
        System.out.println(JSON.toJSONString(obj));
    }
}

运行日志:

代码语言:javascript
复制
setBeanName:"helloService"
setBeanClassLoader{"uRLs":["file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/charsets.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/deploy.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/cldrdata.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/dnsns.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/jfxrt.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/localedata.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/nashorn.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunec.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunjce_provider.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunpkcs11.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/zipfs.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/javaws.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jce.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfr.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfxswt.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jsse.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/management-agent.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/plugin.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/resources.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/rt.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/ant-javafx.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/javafx-mx.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/jconsole.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/packager.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/sa-jdi.jar","file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar","file:/Users/jack/architect/springdemo/target/classes/","file:/Users/jack/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar","file:/Users/jack/.m2/repository/com/alibaba/fastjson/1.2.60/fastjson-1.2.60.jar","file:/Applications/IntelliJ%20IDEA.app/Contents/lib/idea_rt.jar"]}
setBeanFactory:{"accessControlContext":{},"allowBeanDefinitionOverriding":true,"allowEagerClassLoading":true,"autowireCandidateResolver":{},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanExpressionResolver":{},"beanNamesIterator":["helloDao","helloService","environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster"],"beanPostProcessorCount":3,"beanPostProcessors":[{},{},{}],"cacheBeanMetadata":true,"configurationFrozen":true,"customEditors":{},"propertyEditorRegistrars":[{}],"registeredScopeNames":[],"serializationId":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","singletonCount":7,"singletonMutex":{"systemEnvironment":{"IRBRC":"/Users/jack/.rvm/rubies/ruby-2.3.0/.irbrc","PATH":"...,"propertyNames":["IRBRC","PATH","SDKMAN_VERSION","GREP_OPTIONS","GRAILS_HOME","ANDROID_HOME","rvm_loaded_flag","JAVA9_HOME","MAVEN_HOME","JAVA_MAIN_CLASS_24435","SDKMAN_DIR","LOGNAME","rvm_version","PWD","SPRINGBOOT_HOME","Python","rvm_user_install_flag","SHELL","SPRING_BOOT_HOME","MY_RUBY_HOME","GEM_HOME","VERSIONER_PYTHON_PREFER_32_BIT","TMPDIR","rvm_path","XPC_FLAGS","RUBY_VERSION","_system_name","__CF_USER_TEXT_ENCODING","Apple_PubSub_Socket_Render","LC_CTYPE","SDKMAN_CURRENT_API","_system_arch","rvm_bin_path","GRAPHIZ_HOME","KOTLIN_HOME","JAVA_HOME","TERM","rvm_prefix","GRADLE_HOME","ANT_HOME","GROOVY_HOME","VERSIONER_PYTHON_VERSION","XPC_SERVICE_NAME","NODE_PATH","SCALA_HOME","SDKMAN_CANDIDATES_DIR","SDKMAN_LEGACY_API","RUBY_HOME","LSCOLORS","_system_type","_system_version","SDKMAN_PLATFORM","CLICOLOR","USER","CLASSPATH","rvm_stored_umask","SSH_AUTH_SOCK","GEM_PATH","HOME"],"source":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"}}],"systemEnvironment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"}},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"},"helloDao":{},"messageSource":{}},"singletonNames":["environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster","helloDao","helloService"],"typeConverter":{}},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanFactory":{"$ref":"$.autowireCapableBeanFactory"},"beanFactoryPostProcessors":[],"displayName":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","environment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment"},"id":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","protocolResolvers":[],"running":false,"startupDate":1574817896085}
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* setApplicationEventPublisher:{"active":true,"applicationListeners":[],"applicationName":"","autowireCapableBeanFactory":{"accessControlContext":{},"allowBeanDefinitionOverriding":true,"allowEagerClassLoading":true,"autowireCandidateResolver":{},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanExpressionResolver":{},"beanNamesIterator":["helloDao","helloService","environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster"],"beanPostProcessorCount":3,"beanPostProcessors":[{},{},{}],"cacheBeanMetadata":true,"configurationFrozen":true,"customEditors":{},"propertyEditorRegistrars":[{}],"registeredScopeNames":[],"serializationId":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","singletonCount":7,"singletonMutex":{"systemEnvironment":{"IRBRC":"/Users/jack/.rvm/rubies/ruby-2.3.0/.irbrc","PATH":"/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.cargo/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.yarn/bin:/Users/jack/.config/yarn/global/node_modules/.bin:/Users/jack/.rvm/gems/ruby-2.3.0/bin:/Users/jack/.rvm/gems/ruby-2.3.0@global/bin:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/.sdkman/candidates/springboot/current/bin:/Users/jack/.sdkman/candidates/groovy/current/bin:.:.:/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/X11/bin:/usr/local/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/bin:/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin:/Users/jack/soft/apache-maven-3.3.9/bin:/Users/jack/soft/scala-2.12.2/bin:/bin:/Users/jack/soft/gradle-4.10.2/bin:/Users/jack/Library/Android/sdk/bin:/Users/jack/Library/Android/sdk/tools:/Users/jack/Library/Android/sdk/platform-tools:/Users/jack/study/clojure/:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/soft/mytools:/Users/jack/.rvm/bin:/Users/jack/Downloads/phantomjs-2.1.1-macosx/bin:/Users/jack/soft/mongodb-osx-x86_64-3.4.2/bin:/Users/jack/soft/spring-1.5.2.RELEASE/bin:/Users/jack/soft/grails-3.2.8/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/soft/kotlinc/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft:/usr/local/Cellar/graphviz/2.42.2/bin:/Users/jack/.nowa-gui/installation/node_modules/.bin:/Applications/NowaGUI.app/Contents/Resources/app/nodes:/Applications/NowaGUI.app/Contents/Resources/app/node_modules/.bin","SDKMAN_VERSION":"5.5.9+231","GREP_OPTIONS":"--color=auto","GRAILS_HOME":"/Users/jack/soft/grails-3.2.8","ANDROID_HOME":"/Users/jack/Library/Android/sdk","rvm_loaded_flag":"1","JAVA9_HOME":"/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home","MAVEN_HOME":"/Users/jack/soft/apache-maven-3.3.9","JAVA_MAIN_CLASS_24435":"com.light.sword.App","SDKMAN_DIR":"/Users/jack/.sdkman","LOGNAME":"jack","rvm_version":"1.27.0 (latest)","PWD":"/Users/jack/architect/springdemo","SPRINGBOOT_HOME":"/Users/jack/.sdkman/candidates/springboot/current","Python":"/Library/Frameworks/Python.framework/Versions/3.6","rvm_user_install_flag":"1","SHELL":"/bin/bash","SPRING_BOOT_HOME":"/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT","MY_RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0","GEM_HOME":"/Users/jack/.rvm/gems/ruby-2.3.0","VERSIONER_PYTHON_PREFER_32_BIT":"no","TMPDIR":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/","rvm_path":"/Users/jack/.rvm","XPC_FLAGS":"0x0","RUBY_VERSION":"ruby-2.3.0","_system_name":"OSX","__CF_USER_TEXT_ENCODING":"0x1F5:0x19:0x34","Apple_PubSub_Socket_Render":"/private/tmp/com.apple.launchd.HGU9K7UaLt/Render","LC_CTYPE":"zh_CN.UTF-8","SDKMAN_CURRENT_API":"https://api.sdkman.io/2","_system_arch":"x86_64","rvm_bin_path":"/Users/jack/.rvm/bin","GRAPHIZ_HOME":"/usr/local/Cellar/graphviz/2.42.2","KOTLIN_HOME":"/Users/jack/soft/kotlinc","JAVA_HOME":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home","TERM":"xterm-color","rvm_prefix":"/Users/jack","GRADLE_HOME":"/Users/jack/soft/gradle-4.10.2","ANT_HOME":"/Users/jack/soft/apache-ant-1.10.5","GROOVY_HOME":"/Users/jack/.sdkman/candidates/groovy/current","VERSIONER_PYTHON_VERSION":"2.7","XPC_SERVICE_NAME":"0","NODE_PATH":"/usr/local/lib/node_modules","SCALA_HOME":"/Users/jack/soft/scala-2.12.2","SDKMAN_CANDIDATES_DIR":"/Users/jack/.sdkman/candidates","SDKMAN_LEGACY_API":"https://api.sdkman.io/1","RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0","LSCOLORS":"GxFxCxDxBxegedabagaced","_system_type":"Darwin","_system_version":"10.14","SDKMAN_PLATFORM":"Darwin","CLICOLOR":"0","USER":"jack","CLASSPATH":".:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar","rvm_stored_umask":"0022","SSH_AUTH_SOCK":"/private/tmp/com.apple.launchd.sYjE96iqUz/Listeners","GEM_PATH":"/Users/jack/.rvm/gems/ruby-2.3.0:/Users/jack/.rvm/gems/ruby-2.3.0@global","HOME":"/Users/jack"},"applicationEventMulticaster":{},"environment":{"activeProfiles":[],"conversionService":{},"defaultProfiles":["default"],"propertySources":[{"name":"systemProperties","propertyNames":["java.runtime.name","sun.boot.library.path","java.vm.version","gopherProxySet","java.vm.vendor","java.vendor.url","path.separator","java.vm.name","file.encoding.pkg","user.country","sun.java.launcher","sun.os.patch.level","java.vm.specification.name","user.dir","java.runtime.version","java.awt.graphicsenv","java.endorsed.dirs","os.arch","java.io.tmpdir","line.separator","java.vm.specification.vendor","os.name","sun.jnu.encoding","java.library.path","java.specification.name","java.class.version","sun.management.compiler","os.version","user.home","user.timezone","java.awt.printerjob","file.encoding","java.specification.version","java.class.path","user.name","java.vm.specification.version","sun.java.command","java.home","sun.arch.data.model","user.language","java.specification.vendor","awt.toolkit","java.vm.info","java.version","java.ext.dirs","sun.boot.class.path","java.vendor","file.separator","java.vendor.url.bug","sun.io.unicode.encoding","sun.cpu.endian","sun.cpu.isalist"],"source":{"java.runtime.name":"Java(TM) SE Runtime Environment","sun.boot.library.path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib","java.vm.version":"25.40-b25","gopherProxySet":"false","java.vm.vendor":"Oracle Corporation","java.vendor.url":"http://java.oracle.com/","path.separator":":","java.vm.name":"Java HotSpot(TM) 64-Bit Server VM","file.encoding.pkg":"sun.io","user.country":"CN","sun.java.launcher":"SUN_STANDARD","sun.os.patch.level":"unknown","java.vm.specification.name":"Java Virtual Machine Specification","user.dir":"/Users/jack/architect/springdemo","java.runtime.version":"1.8.0_40-b27","java.awt.graphicsenv":"sun.awt.CGraphicsEnvironment","java.endorsed.dirs":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/endorsed","os.arch":"x86_64","java.io.tmpdir":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/","line.separator":"\n","java.vm.specification.vendor":"Oracle Corporation","os.name":"Mac OS X","sun.jnu.encoding":"UTF-8","java.library.path":"/Users/jack/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.","java.specification.name":"Java Platform API Specification","java.class.version":"52.0","sun.management.compiler":"HotSpot 64-Bit Tiered Compilers","os.version":"10.14.5","user.home":"/Users/jack","user.timezone":"Asia/Shanghai","java.awt.printerjob":"sun.lwawt.macosx.CPrinterJob","file.encoding":"UTF-8","java.specification.version":"1.8","java.class.path":"...,"propertyNames":["IRBRC","PATH","SDKMAN_VERSION","GREP_OPTIONS","GRAILS_HOME","ANDROID_HOME","rvm_loaded_flag","JAVA9_HOME","MAVEN_HOME","JAVA_MAIN_CLASS_24435","SDKMAN_DIR","LOGNAME","rvm_version","PWD","SPRINGBOOT_HOME","Python","rvm_user_install_flag","SHELL","SPRING_BOOT_HOME","MY_RUBY_HOME","GEM_HOME","VERSIONER_PYTHON_PREFER_32_BIT","TMPDIR","rvm_path","XPC_FLAGS","RUBY_VERSION","_system_name","__CF_USER_TEXT_ENCODING","Apple_PubSub_Socket_Render","LC_CTYPE","SDKMAN_CURRENT_API","_system_arch","rvm_bin_path","GRAPHIZ_HOME","KOTLIN_HOME","JAVA_HOME","TERM","rvm_prefix","GRADLE_HOME","ANT_HOME","GROOVY_HOME","VERSIONER_PYTHON_VERSION","XPC_SERVICE_NAME","NODE_PATH","SCALA_HOME","SDKMAN_CANDIDATES_DIR","SDKMAN_LEGACY_API","RUBY_HOME","LSCOLORS","_system_type","_system_version","SDKMAN_PLATFORM","CLICOLOR","USER","CLASSPATH","rvm_stored_umask","SSH_AUTH_SOCK","GEM_PATH","HOME"],"source":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"}}],"systemEnvironment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"}},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"},"helloDao":{},"messageSource":{}},"singletonNames":["environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster","helloDao","helloService"],"typeConverter":{}},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanFactory":{"$ref":"$.autowireCapableBeanFactory"},"beanFactoryPostProcessors":[],"displayName":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","environment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment"},"id":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","protocolResolvers":[],"running":false,"startupDate":1574817896085}
*/
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* setMessageSource:{"active":true,"applicationListeners":[],"applicationName":"","autowireCapableBeanFactory":{"accessControlContext":{},"allowBeanDefinitionOverriding":true,"allowEagerClassLoading":true,"autowireCandidateResolver":{},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanExpressionResolver":{},"beanNamesIterator":["helloDao","helloService","environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster"],"beanPostProcessorCount":3,"beanPostProcessors":[{},{},{}],"cacheBeanMetadata":true,"configurationFrozen":true,"customEditors":{},"propertyEditorRegistrars":[{}],"registeredScopeNames":[],"serializationId":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","singletonCount":7,"singletonMutex":{"systemEnvironment":{"IRBRC":"/Users/jack/.rvm/rubies/ruby-2.3.0/.irbrc","PATH":"/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.cargo/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.yarn/bin:/Users/jack/.config/yarn/global/node_modules/.bin:/Users/jack/.rvm/gems/ruby-2.3.0/bin:/Users/jack/.rvm/gems/ruby-2.3.0@global/bin:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/.sdkman/candidates/springboot/current/bin:/Users/jack/.sdkman/candidates/groovy/current/bin:.:.:/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/X11/bin:/usr/local/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/bin:/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin:/Users/jack/soft/apache-maven-3.3.9/bin:/Users/jack/soft/scala-2.12.2/bin:/bin:/Users/jack/soft/gradle-4.10.2/bin:/Users/jack/Library/Android/sdk/bin:/Users/jack/Library/Android/sdk/tools:/Users/jack/Library/Android/sdk/platform-tools:/Users/jack/study/clojure/:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/soft/mytools:/Users/jack/.rvm/bin:/Users/jack/Downloads/phantomjs-2.1.1-macosx/bin:/Users/jack/soft/mongodb-osx-x86_64-3.4.2/bin:/Users/jack/soft/spring-1.5.2.RELEASE/bin:/Users/jack/soft/grails-3.2.8/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/soft/kotlinc/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft:/usr/local/Cellar/graphviz/2.42.2/bin:/Users/jack/.nowa-gui/installation/node_modules/.bin:/Applications/NowaGUI.app/Contents/Resources/app/nodes:/Applications/NowaGUI.app/Contents/Resources/app/node_modules/.bin","SDKMAN_VERSION":"5.5.9+231","GREP_OPTIONS":"--color=auto","GRAILS_HOME":"/Users/jack/soft/grails-3.2.8","ANDROID_HOME":"/Users/jack/Library/Android/sdk","rvm_loaded_flag":"1","JAVA9_HOME":"/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home","MAVEN_HOME":"/Users/jack/soft/apache-maven-3.3.9","JAVA_MAIN_CLASS_24435":"com.light.sword.App","SDKMAN_DIR":"/Users/jack/.sdkman","LOGNAME":"jack","rvm_version":"1.27.0 (latest)","PWD":"/Users/jack/architect/springdemo","SPRINGBOOT_HOME":"/Users/jack/.sdkman/candidates/springboot/current","Python":"/Library/Frameworks/Python.framework/Versions/3.6","rvm_user_install_flag":"1","SHELL":"/bin/bash","SPRING_BOOT_HOME":"/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT","MY_RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0","GEM_HOME":"/Users/jack/.rvm/gems/ruby-2.3.0","VERSIONER_PYTHON_PREFER_32_BIT":"no","TMPDIR":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/","rvm_path":"/Users/jack/.rvm","XPC_FLAGS":"0x0","RUBY_VERSION":"ruby-2.3.0","_system_name":"OSX","__CF_USER_TEXT_ENCODING":"0x1F5:0x19:0x34","Apple_PubSub_Socket_Render":"/private/tmp/com.apple.launchd.HGU9K7UaLt/Render","LC_CTYPE":"zh_CN.UTF-8","SDKMAN_CURRENT_API":"https://api.sdkman.io/2","_system_arch":"x86_64","rvm_bin_path":"/Users/jack/.rvm/bin","GRAPHIZ_HOME":"/usr/local/Cellar/graphviz/2.42.2","KOTLIN_HOME":"/Users/jack/soft/kotlinc","JAVA_HOME":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home","TERM":"xterm-color","rvm_prefix":"/Users/jack","GRADLE_HOME":"/Users/jack/soft/gradle-4.10.2","ANT_HOME":"/Users/jack/soft/apache-ant-1.10.5","GROOVY_HOME":"/Users/jack/.sdkman/candidates/groovy/current","VERSIONER_PYTHON_VERSION":"2.7","XPC_SERVICE_NAME":"0","NODE_PATH":"/usr/local/lib/node_modules","SCALA_HOME":"/Users/jack/soft/scala-2.12.2","SDKMAN_CANDIDATES_DIR":"/Users/jack/.sdkman/candidates","SDKMAN_LEGACY_API":"https://api.sdkman.io/1","RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0","LSCOLORS":"GxFxCxDxBxegedabagaced","_system_type":"Darwin","_system_version":"10.14","SDKMAN_PLATFORM":"Darwin","CLICOLOR":"0","USER":"jack","CLASSPATH":".:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar","rvm_stored_umask":"0022","SSH_AUTH_SOCK":"/private/tmp/com.apple.launchd.sYjE96iqUz/Listeners","GEM_PATH":"/Users/jack/.rvm/gems/ruby-2.3.0:/Users/jack/.rvm/gems/ruby-2.3.0@global","HOME":"/Users/jack"},"applicationEventMulticaster":{},"environment":{"activeProfiles":[],"conversionService":{},"defaultProfiles":["default"],"propertySources":[{"name":"systemProperties","propertyNames":["java.runtime.name","sun.boot.library.path","java.vm.version","gopherProxySet","java.vm.vendor","java.vendor.url","path.separator","java.vm.name","file.encoding.pkg","user.country","sun.java.launcher","sun.os.patch.level","java.vm.specification.name","user.dir","java.runtime.version","java.awt.graphicsenv","java.endorsed.dirs","os.arch","java.io.tmpdir","line.separator","java.vm.specification.vendor","os.name","sun.jnu.encoding","java.library.path","java.specification.name","java.class.version","sun.management.compiler","os.version","user.home","user.timezone","java.awt.printerjob","file.encoding","java.specification.version","java.class.path","user.name","java.vm.specification.version","sun.java.command","java.home","sun.arch.data.model","user.language","java.specification.vendor","awt.toolkit","java.vm.info","java.version","java.ext.dirs","sun.boot.class.path","java.vendor","file.separator","java.vendor.url.bug","sun.io.unicode.encoding","sun.cpu.endian","sun.cpu.isalist"],"source":{"java.runtime.name":"Java(TM) SE Runtime Environment","sun.boot.library.path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib","java.vm.version":"25.40-b25","gopherProxySet":"false","java.vm.vendor":"Oracle Corporation","java.vendor.url":"http://java.oracle.com/","path.separator":":","java.vm.name":"Java HotSpot(TM) 64-Bit Server VM","file.encoding.pkg":"sun.io","user.country":"CN","sun.java.launcher":"SUN_STANDARD","sun.os.patch.level":"unknown","java.vm.specification.name":"Java Virtual Machine Specification","user.dir":"/Users/jack/architect/springdemo","java.runtime.version":"1.8.0_40-b27","java.awt.graphicsenv":"sun.awt.CGraphicsEnvironment","java.endorsed.dirs":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/endorsed","os.arch":"x86_64","java.io.tmpdir":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/","line.separator":"\n","java.vm.specification.vendor":"Oracle Corporation","os.name":"Mac OS X","sun.jnu.encoding":"UTF-8","java.library.path":"/Users/jack/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.","java.specification.name":"Java Platform API Specification","java.class.version":"52.0","sun.management.compiler":"HotSpot 64-Bit Tiered Compilers","os.version":"10.14.5","user.home":"/Users/jack","user.timezone":"Asia/Shanghai","java.awt.printerjob":"sun.lwawt.macosx.CPrinterJob","file.encoding":"UTF-8","java.specification.version":"1.8","java.class.path":"...","java.vendor":"Oracle Corporation","file.separator":"/","java.vendor.url.bug":"http://bugreport.sun.com/bugreport/","sun.io.unicode.encoding":"UnicodeBig","sun.cpu.endian":"little","sun.cpu.isalist":""}},{"name":"systemEnvironment","propertyNames":["IRBRC","PATH","SDKMAN_VERSION","GREP_OPTIONS","GRAILS_HOME","ANDROID_HOME","rvm_loaded_flag","JAVA9_HOME","MAVEN_HOME","JAVA_MAIN_CLASS_24435","SDKMAN_DIR","LOGNAME","rvm_version","PWD","SPRINGBOOT_HOME","Python","rvm_user_install_flag","SHELL","SPRING_BOOT_HOME","MY_RUBY_HOME","GEM_HOME","VERSIONER_PYTHON_PREFER_32_BIT","TMPDIR","rvm_path","XPC_FLAGS","RUBY_VERSION","_system_name","__CF_USER_TEXT_ENCODING","Apple_PubSub_Socket_Render","LC_CTYPE","SDKMAN_CURRENT_API","_system_arch","rvm_bin_path","GRAPHIZ_HOME","KOTLIN_HOME","JAVA_HOME","TERM","rvm_prefix","GRADLE_HOME","ANT_HOME","GROOVY_HOME","VERSIONER_PYTHON_VERSION","XPC_SERVICE_NAME","NODE_PATH","SCALA_HOME","SDKMAN_CANDIDATES_DIR","SDKMAN_LEGACY_API","RUBY_HOME","LSCOLORS","_system_type","_system_version","SDKMAN_PLATFORM","CLICOLOR","USER","CLASSPATH","rvm_stored_umask","SSH_AUTH_SOCK","GEM_PATH","HOME"],"source":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"}}],"systemEnvironment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"}},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"},"helloDao":{},"messageSource":{}},"singletonNames":["environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster","helloDao","helloService"],"typeConverter":{}},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanFactory":{"$ref":"$.autowireCapableBeanFactory"},"beanFactoryPostProcessors":[],"displayName":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","environment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment"},"id":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","protocolResolvers":[],"running":false,"startupDate":1574817896085}
*/
setApplicationContext:{"active":true,"applicationListeners":[],"applicationName":"","autowireCapableBeanFactory":{"accessControlContext":{},"allowBeanDefinitionOverriding":true,"allowEagerClassLoading":true,"autowireCandidateResolver":{},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanExpressionResolver":{},"beanNamesIterator":["helloDao","helloService","environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster"],"beanPostProcessorCount":3,"beanPostProcessors":[{},{},{}],"cacheBeanMetadata":true,"configurationFrozen":true,"customEditors":{},"propertyEditorRegistrars":[{}],"registeredScopeNames":[],"serializationId":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","singletonCount":7,"singletonMutex":{"systemEnvironment":{"IRBRC":"/Users/jack/.rvm/rubies/ruby-2.3.0/.irbrc","PATH":"...,"HOME":"/Users/jack"},"applicationEventMulticaster":{},"environment":{"activeProfiles":[],"conversionService":{},"defaultProfiles":["default"],"propertySources":[{"name":"systemProperties","propertyNames":["java.runtime.name","sun.boot.library.path","java.vm.version","gopherProxySet","java.vm.vendor","java.vendor.url","path.separator","java.vm.name","file.encoding.pkg","user.country","sun.java.launcher","sun.os.patch.level","java.vm.specification.name","user.dir","java.runtime.version","java.awt.graphicsenv","java.endorsed.dirs","os.arch","java.io.tmpdir","line.separator","java.vm.specification.vendor","os.name","sun.jnu.encoding","java.library.path","java.specification.name","java.class.version","sun.management.compiler","os.version","user.home","user.timezone","java.awt.printerjob","file.encoding",...Corporation","file.separator":"/","java.vendor.url.bug":"http://bugreport.sun.com/bugreport/","sun.io.unicode.encoding":"UnicodeBig","sun.cpu.endian":"little","sun.cpu.isalist":""}},{"name":"systemEnvironment","propertyNames":["IRBRC","PATH","SDKMAN_VERSION","GREP_OPTIONS","GRAILS_HOME","ANDROID_HOME","rvm_loaded_flag","JAVA9_HOME","MAVEN_HOME","JAVA_MAIN_CLASS_24435","SDKMAN_DIR","LOGNAME","rvm_version","PWD","SPRINGBOOT_HOME","Python","rvm_user_install_flag","SHELL","SPRING_BOOT_HOME","MY_RUBY_HOME","GEM_HOME","VERSIONER_PYTHON_PREFER_32_BIT","TMPDIR","rvm_path","XPC_FLAGS","RUBY_VERSION","_system_name","__CF_USER_TEXT_ENCODING","Apple_PubSub_Socket_Render","LC_CTYPE","SDKMAN_CURRENT_API","_system_arch","rvm_bin_path","GRAPHIZ_HOME","KOTLIN_HOME","JAVA_HOME","TERM","rvm_prefix","GRADLE_HOME","ANT_HOME","GROOVY_HOME","VERSIONER_PYTHON_VERSION","XPC_SERVICE_NAME","NODE_PATH","SCALA_HOME","SDKMAN_CANDIDATES_DIR","SDKMAN_LEGACY_API","RUBY_HOME","LSCOLORS","_system_type","_system_version","SDKMAN_PLATFORM","CLICOLOR","USER","CLASSPATH","rvm_stored_umask","SSH_AUTH_SOCK","GEM_PATH","HOME"],"source":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"}}],"systemEnvironment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.systemEnvironment"},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"}},"systemProperties":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment.null.source"},"helloDao":{},"messageSource":{}},"singletonNames":["environment","systemProperties","systemEnvironment","messageSource","applicationEventMulticaster","helloDao","helloService"],"typeConverter":{}},"beanDefinitionCount":2,"beanDefinitionNames":["helloDao","helloService"],"beanFactory":{"$ref":"$.autowireCapableBeanFactory"},"beanFactoryPostProcessors":[],"displayName":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","environment":{"$ref":"$.autowireCapableBeanFactory.singletonMutex.environment"},"id":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3","protocolResolvers":[],"running":false,"startupDate":1574817896085}
org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3, started on Wed Nov 27 09:24:56 CST 2019
com.light.sword.service.HelloServiceImpl@38364841
Hello,Jack, now is:Wed Nov 27 09:24:56 CST 2019
Hello,$Jobs, now is:Wed Nov 27 09:24:56 CST 2019

从上面日志中各个对象的数据结构,我们可以看到关于 Spring 框架的所有秘密:

setBeanName

代码语言:javascript
复制
    /**
     * Set the name of the bean in the bean factory that created this bean.
     * <p>Invoked after population of normal bean properties but before an
     * init callback such as {@link InitializingBean#afterPropertiesSet()}
     * or a custom init-method.
     *
     * @param name the name of the bean in the factory.
     *             Note that this name is the actual bean name used in the factory, which may
     *             differ from the originally specified name: in particular for inner bean
     *             names, the actual bean name might have been made unique through appending
     *             "#..." suffixes. Use the {@link BeanFactoryUtils#originalBeanName(String)}
     *             method to extract the original bean name (without suffix), if desired.
     */
    @Override
    public void setBeanName(String name) {
        print("setBeanName:");
        printlnJson(name);
    }

setBeanClassLoader

代码语言:javascript
复制
    /**
     * Callback that supplies the bean {@link ClassLoader class loader} to
     * a bean instance.
     * <p>Invoked <i>after</i> the population of normal bean properties but
     * <i>before</i> an initialization callback such as
     * {@link InitializingBean InitializingBean's}
     * {@link InitializingBean#afterPropertiesSet()}
     * method or a custom init-method.
     *
     * @param classLoader the owning class loader
     */
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        print("setBeanClassLoader:");
        printlnJson(classLoader);
    }
代码语言:javascript
复制
{
    "uRLs":[
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/charsets.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/deploy.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/cldrdata.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/dnsns.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/jfxrt.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/localedata.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/nashorn.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunec.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunjce_provider.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunpkcs11.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/zipfs.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/javaws.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jce.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfr.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfxswt.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jsse.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/management-agent.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/plugin.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/resources.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/rt.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/ant-javafx.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/javafx-mx.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/jconsole.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/packager.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/sa-jdi.jar",
        "file:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar",
        "file:/Users/jack/architect/springdemo/target/classes/",
        "file:/Users/jack/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar",
        "file:/Users/jack/.m2/repository/com/alibaba/fastjson/1.2.60/fastjson-1.2.60.jar",
        "file:/Applications/IntelliJ%20IDEA.app/Contents/lib/idea_rt.jar"
    ]
}

setBeanFactory

代码语言:javascript
复制
    /**
     * Callback that supplies the owning factory to a bean instance.
     * <p>Invoked after the population of normal bean properties
     * but before an initialization callback such as
     * {@link InitializingBean#afterPropertiesSet()} or a custom init-method.
     *
     * @param beanFactory owning BeanFactory (never {@code null}).
     *                    The bean can immediately call methods on the factory.
     * @throws BeansException in case of initialization errors
     * @see BeanInitializationException
     */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        print("setBeanFactory:");
        printlnJson(beanFactory);
    }
代码语言:javascript
复制
{
    "accessControlContext":{

    },
    "allowBeanDefinitionOverriding":true,
    "allowEagerClassLoading":true,
    "autowireCandidateResolver":{

    },
    "beanDefinitionCount":2,
    "beanDefinitionNames":[
        "helloDao",
        "helloService"
    ],
    "beanExpressionResolver":{

    },
    "beanNamesIterator":[
        "helloDao",
        "helloService",
        "environment",
        "systemProperties",
        "systemEnvironment",
        "messageSource",
        "applicationEventMulticaster"
    ],
    "beanPostProcessorCount":3,
    "beanPostProcessors":[
        {

        },
        {

        },
        {

        }
    ],
    "cacheBeanMetadata":true,
    "configurationFrozen":true,
    "customEditors":{

    },
    "propertyEditorRegistrars":[
        {

        }
    ],
    "registeredScopeNames":[

    ],
    "serializationId":"org.springframework.context.support.ClassPathXmlApplicationContext@2e0fa5d3",
    "singletonCount":7,
    "singletonMutex":{
        "systemEnvironment":{
            "IRBRC":"/Users/jack/.rvm/rubies/ruby-2.3.0/.irbrc",
            "PATH":"/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.cargo/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/.yarn/bin:/Users/jack/.config/yarn/global/node_modules/.bin:/Users/jack/.rvm/gems/ruby-2.3.0/bin:/Users/jack/.rvm/gems/ruby-2.3.0@global/bin:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/.sdkman/candidates/springboot/current/bin:/Users/jack/.sdkman/candidates/groovy/current/bin:.:.:/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/X11/bin:/usr/local/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/bin:/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin:/Users/jack/soft/apache-maven-3.3.9/bin:/Users/jack/soft/scala-2.12.2/bin:/bin:/Users/jack/soft/gradle-4.10.2/bin:/Users/jack/Library/Android/sdk/bin:/Users/jack/Library/Android/sdk/tools:/Users/jack/Library/Android/sdk/platform-tools:/Users/jack/study/clojure/:/Users/jack/.rvm/rubies/ruby-2.3.0/bin:/Users/jack/soft/mytools:/Users/jack/.rvm/bin:/Users/jack/Downloads/phantomjs-2.1.1-macosx/bin:/Users/jack/soft/mongodb-osx-x86_64-3.4.2/bin:/Users/jack/soft/spring-1.5.2.RELEASE/bin:/Users/jack/soft/grails-3.2.8/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/jack/soft/kotlinc/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT/bin:/Users/jack/soft/apache-ant-1.10.5/bin:/Users/jack/soft:/usr/local/Cellar/graphviz/2.42.2/bin:/Users/jack/.nowa-gui/installation/node_modules/.bin:/Applications/NowaGUI.app/Contents/Resources/app/nodes:/Applications/NowaGUI.app/Contents/Resources/app/node_modules/.bin",
            "SDKMAN_VERSION":"5.5.9+231",
            "GREP_OPTIONS":"--color=auto",
            "GRAILS_HOME":"/Users/jack/soft/grails-3.2.8",
            "ANDROID_HOME":"/Users/jack/Library/Android/sdk",
            "rvm_loaded_flag":"1",
            "JAVA9_HOME":"/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home",
            "MAVEN_HOME":"/Users/jack/soft/apache-maven-3.3.9",
            "JAVA_MAIN_CLASS_24435":"com.light.sword.App",
            "SDKMAN_DIR":"/Users/jack/.sdkman",
            "LOGNAME":"jack",
            "rvm_version":"1.27.0 (latest)",
            "PWD":"/Users/jack/architect/springdemo",
            "SPRINGBOOT_HOME":"/Users/jack/.sdkman/candidates/springboot/current",
            "Python":"/Library/Frameworks/Python.framework/Versions/3.6",
            "rvm_user_install_flag":"1",
            "SHELL":"/bin/bash",
            "SPRING_BOOT_HOME":"/Users/jack/soft/spring-2.0.0.BUILD-SNAPSHOT",
            "MY_RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0",
            "GEM_HOME":"/Users/jack/.rvm/gems/ruby-2.3.0",
            "VERSIONER_PYTHON_PREFER_32_BIT":"no",
            "TMPDIR":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/",
            "rvm_path":"/Users/jack/.rvm",
            "XPC_FLAGS":"0x0",
            "RUBY_VERSION":"ruby-2.3.0",
            "_system_name":"OSX",
            "__CF_USER_TEXT_ENCODING":"0x1F5:0x19:0x34",
            "Apple_PubSub_Socket_Render":"/private/tmp/com.apple.launchd.HGU9K7UaLt/Render",
            "LC_CTYPE":"zh_CN.UTF-8",
            "SDKMAN_CURRENT_API":"[https://api.sdkman.io/2](https://api.sdkman.io/2)",
            "_system_arch":"x86_64",
            "rvm_bin_path":"/Users/jack/.rvm/bin",
            "GRAPHIZ_HOME":"/usr/local/Cellar/graphviz/2.42.2",
            "KOTLIN_HOME":"/Users/jack/soft/kotlinc",
            "JAVA_HOME":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home",
            "TERM":"xterm-color",
            "rvm_prefix":"/Users/jack",
            "GRADLE_HOME":"/Users/jack/soft/gradle-4.10.2",
            "ANT_HOME":"/Users/jack/soft/apache-ant-1.10.5",
            "GROOVY_HOME":"/Users/jack/.sdkman/candidates/groovy/current",
            "VERSIONER_PYTHON_VERSION":"2.7",
            "XPC_SERVICE_NAME":"0",
            "NODE_PATH":"/usr/local/lib/node_modules",
            "SCALA_HOME":"/Users/jack/soft/scala-2.12.2",
            "SDKMAN_CANDIDATES_DIR":"/Users/jack/.sdkman/candidates",
            "SDKMAN_LEGACY_API":"[https://api.sdkman.io/1](https://api.sdkman.io/1)",
            "RUBY_HOME":"/Users/jack/.rvm/rubies/ruby-2.3.0",
            "LSCOLORS":"GxFxCxDxBxegedabagaced",
            "_system_type":"Darwin",
            "_system_version":"10.14",
            "SDKMAN_PLATFORM":"Darwin",
            "CLICOLOR":"0",
            "USER":"jack",
            "CLASSPATH":".:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar",
            "rvm_stored_umask":"0022",
            "SSH_AUTH_SOCK":"/private/tmp/com.apple.launchd.sYjE96iqUz/Listeners",
            "GEM_PATH":"/Users/jack/.rvm/gems/ruby-2.3.0:/Users/jack/.rvm/gems/ruby-2.3.0@global",
            "HOME":"/Users/jack"
        },
        "applicationEventMulticaster":{

        },
        "environment":{
            "activeProfiles":[

            ],
            "conversionService":{

            },
            "defaultProfiles":[
                "default"
            ],
            "propertySources":[
                {
                    "name":"systemProperties",
                    "propertyNames":[
                        "java.runtime.name",
                        "sun.boot.library.path",
                        "java.vm.version",
                        "gopherProxySet",
                        "java.vm.vendor",
                        "java.vendor.url",
                        "path.separator",
                        "java.vm.name",
                        "file.encoding.pkg",
                        "user.country",
                        "sun.java.launcher",
                        "sun.os.patch.level",
                        "java.vm.specification.name",
                        "user.dir",
                        "java.runtime.version",
                        "java.awt.graphicsenv",
                        "java.endorsed.dirs",
                        "os.arch",
                        "java.io.tmpdir",
                        "line.separator",
                        "java.vm.specification.vendor",
                        "os.name",
                        "sun.jnu.encoding",
                        "java.library.path",
                        "java.specification.name",
                        "java.class.version",
                        "sun.management.compiler",
                        "os.version",
                        "user.home",
                        "user.timezone",
                        "java.awt.printerjob",
                        "file.encoding",
                        "java.specification.version",
                        "java.class.path",
                        "user.name",
                        "java.vm.specification.version",
                        "sun.java.command",
                        "java.home",
                        "sun.arch.data.model",
                        "user.language",
                        "java.specification.vendor",
                        "awt.toolkit",
                        "java.vm.info",
                        "java.version",
                        "java.ext.dirs",
                        "sun.boot.class.path",
                        "java.vendor",
                        "file.separator",
                        "java.vendor.url.bug",
                        "sun.io.unicode.encoding",
                        "sun.cpu.endian",
                        "sun.cpu.isalist"
                    ],
                    "source":{
                        "java.runtime.name":"Java(TM) SE Runtime Environment",
                        "sun.boot.library.path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib",
                        "java.vm.version":"25.40-b25",
                        "gopherProxySet":"false",
                        "java.vm.vendor":"Oracle Corporation",
                        "java.vendor.url":"[http://java.oracle.com/](http://java.oracle.com/)",
                        "path.separator":":",
                        "java.vm.name":"Java HotSpot(TM) 64-Bit Server VM",
                        "file.encoding.pkg":"sun.io",
                        "user.country":"CN",
                        "sun.java.launcher":"SUN_STANDARD",
                        "sun.os.patch.level":"unknown",
                        "java.vm.specification.name":"Java Virtual Machine Specification",
                        "user.dir":"/Users/jack/architect/springdemo",
                        "java.runtime.version":"1.8.0_40-b27",
                        "java.awt.graphicsenv":"sun.awt.CGraphicsEnvironment",
                        "java.endorsed.dirs":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/endorsed",
                        "os.arch":"x86_64",
                        "java.io.tmpdir":"/var/folders/q5/kvt7_nsd6ngdw5qry4d99xv00000gn/T/",
                        "line.separator":" ",
                        "java.vm.specification.vendor":"Oracle Corporation",
                        "os.name":"Mac OS X",
                        "sun.jnu.encoding":"UTF-8",
                        "java.library.path":"/Users/jack/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.",
                        "java.specification.name":"Java Platform API Specification",
                        "java.class.version":"52.0",
                        "sun.management.compiler":"HotSpot 64-Bit Tiered Compilers",
                        "os.version":"10.14.5",
                        "user.home":"/Users/jack",
                        "user.timezone":"Asia/Shanghai",
                        "java.awt.printerjob":"sun.lwawt.macosx.CPrinterJob",
                        "file.encoding":"UTF-8",
                        "java.specification.version":"1.8",
                        "java.class.path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/lib/tools.jar:/Users/jack/architect/springdemo/target/classes:/Users/jack/.m2/repository/org/springframework/spring-core/5.2.1.RELEASE/spring-core-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/org/springframework/spring-jcl/5.2.1.RELEASE/spring-jcl-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/org/springframework/spring-context/5.2.1.RELEASE/spring-context-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/org/springframework/spring-aop/5.2.1.RELEASE/spring-aop-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar:/Users/jack/.m2/repository/com/alibaba/fastjson/1.2.60/fastjson-1.2.60.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar",
                        "user.name":"jack",
                        "java.vm.specification.version":"1.8",
                        "sun.java.command":"com.light.sword.App",
                        "java.home":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre",
                        "sun.arch.data.model":"64",
                        "user.language":"zh",
                        "java.specification.vendor":"Oracle Corporation",
                        "awt.toolkit":"sun.lwawt.macosx.LWCToolkit",
                        "java.vm.info":"mixed mode",
                        "java.version":"1.8.0_40",
                        "java.ext.dirs":"/Users/jack/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java",
                        "sun.boot.class.path":"/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_40/Contents/Home/jre/classes",
                        "java.vendor":"Oracle Corporation",
                        "file.separator":"/",
                        "java.vendor.url.bug":"[http://bugreport.sun.com/bugreport/](http://bugreport.sun.com/bugreport/)",
                        "sun.io.unicode.encoding":"UnicodeBig",
                        "sun.cpu.endian":"little",
                        "sun.cpu.isalist":""
                    }
                },
                {
                    "name":"systemEnvironment",
                    "propertyNames":[
                        "IRBRC",
                        "PATH",
                        "SDKMAN_VERSION",
                        "GREP_OPTIONS",
                        "GRAILS_HOME",
                        "ANDROID_HOME",
                        "rvm_loaded_flag",
                        "JAVA9_HOME",
                        "MAVEN_HOME",
                        "JAVA_MAIN_CLASS_24435",
                        "SDKMAN_DIR",
                        "LOGNAME",
                        "rvm_version",
                        "PWD",
                        "SPRINGBOOT_HOME",
                        "Python",
                        "rvm_user_install_flag",
                        "SHELL",
                        "SPRING_BOOT_HOME",
                        "MY_RUBY_HOME",
                        "GEM_HOME",
                        "VERSIONER_PYTHON_PREFER_32_BIT",
                        "TMPDIR",
                        "rvm_path",
                        "XPC_FLAGS",
                        "RUBY_VERSION",
                        "_system_name",
                        "__CF_USER_TEXT_ENCODING",
                        "Apple_PubSub_Socket_Render",
                        "LC_CTYPE",
                        "SDKMAN_CURRENT_API",
                        "_system_arch",
                        "rvm_bin_path",
                        "GRAPHIZ_HOME",
                        "KOTLIN_HOME",
                        "JAVA_HOME",
                        "TERM",
                        "rvm_prefix",
                        "GRADLE_HOME",
                        "ANT_HOME",
                        "GROOVY_HOME",
                        "VERSIONER_PYTHON_VERSION",
                        "XPC_SERVICE_NAME",
                        "NODE_PATH",
                        "SCALA_HOME",
                        "SDKMAN_CANDIDATES_DIR",
                        "SDKMAN_LEGACY_API",
                        "RUBY_HOME",
                        "LSCOLORS",
                        "_system_type",
                        "_system_version",
                        "SDKMAN_PLATFORM",
                        "CLICOLOR",
                        "USER",
                        "CLASSPATH",
                        "rvm_stored_umask",
                        "SSH_AUTH_SOCK",
                        "GEM_PATH",
                        "HOME"
                    ],
                    "source":{
                        "$ref":"$.singletonMutex.systemEnvironment"
                    }
                }
            ],
            "systemEnvironment":{
                "$ref":"$.singletonMutex.systemEnvironment"
            },
            "systemProperties":{
                "$ref":"$.singletonMutex.environment.null.source"
            }
        },
        "systemProperties":{
            "$ref":"$.singletonMutex.environment.null.source"
        },
        "helloDao":{

        },
        "messageSource":{

        }
    },
    "singletonNames":[
        "environment",
        "systemProperties",
        "systemEnvironment",
        "messageSource",
        "applicationEventMulticaster",
        "helloDao",
        "helloService"
    ],
    "typeConverter":{

    }
}

另外注意 DefaultListableBeanFactory cannot be cast to org.springframework.context.support.ClassPathXmlApplicationContext

代码语言:javascript
复制
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        print("setBeanFactory:");
        printlnJson(beanFactory);
        String[] beanDefinitionNames = ((DefaultListableBeanFactory) beanFactory).getBeanDefinitionNames();
        // DefaultListableBeanFactory cannot be cast to org.springframework.context.support.ClassPathXmlApplicationContext
        // String[] beanDefinitionNames2 = ((ClassPathXmlApplicationContext) beanFactory).getBeanDefinitionNames();
        printlnJson(beanDefinitionNames);
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [ 成为架构师系列 ] 5. Spring Bean 的生命周期
  • AbstractXmlApplicationContext
  • Alt + Shift + Command + U
  • setBeanName
  • setBeanClassLoader
  • setBeanFactory
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档