1 ibatis如何使用
2 spring app context的启动顺序
3 数据库优化有那些方法
4 hibernate中open session in view是什么
5 left/right [outer] join对性能有和影响 

解决方案 »

  1.   

    问题一:答案在org.springframework.context.support.AbstractApplicationContext#refresh方法public void refresh() throws BeansException, IllegalStateException {
    synchronized (this.startupShutdownMonitor) {
    // Prepare this context for refreshing.
    prepareRefresh(); // Tell the subclass to refresh the internal bean factory.
    ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); // Prepare the bean factory for use in this context.
    prepareBeanFactory(beanFactory); try {
    // Allows post-processing of the bean factory in context subclasses.
    postProcessBeanFactory(beanFactory); // Invoke factory processors registered as beans in the context.
    invokeBeanFactoryPostProcessors(beanFactory); // Register bean processors that intercept bean creation.
    registerBeanPostProcessors(beanFactory); // Initialize message source for this context.
    initMessageSource(); // Initialize event multicaster for this context.
    initApplicationEventMulticaster(); // Initialize other special beans in specific context subclasses.
    onRefresh(); // Check for listener beans and register them.
    registerListeners(); // Instantiate all remaining (non-lazy-init) singletons.
    finishBeanFactoryInitialization(beanFactory); // Last step: publish corresponding event.
    finishRefresh();
    } catch (BeansException ex) {
    // Destroy already created singletons to avoid dangling resources.
    beanFactory.destroySingletons(); // Reset 'active' flag.
    cancelRefresh(ex); // Propagate exception to caller.
    throw ex;
    }
    }
    }
      

  2.   


    public void refresh() throws BeansException, IllegalStateException {
            synchronized (this.startupShutdownMonitor) {
                //为刷新准备好context,实际上就是同步的把active标志位置位.
                prepareRefresh();            // 刷新内建的bean factory, 具体的实现在org.springframework.context.support.AbstractRefreshableApplicationContext中它实际上是把旧的factory销毁                                                // 重建了一个.
                ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();            // 准备本context要用的bean factory,这个太复杂了,单说吧.
                prepareBeanFactory(beanFactory);            try {
                    // 在bean factory准备好之后允许进行一些处理,这里什么都没做不过不同的实现有自己的处理.
                    postProcessBeanFactory(beanFactory);                // 调用在context中注册 bean工厂后处理器.
                    invokeBeanFactoryPostProcessors(beanFactory);                // 注册拦截bean创建的bean processors.
                    registerBeanPostProcessors(beanFactory);                // 初始化消息源.
                    initMessageSource();                // 初始化 event multicaster,这个东西是用来管理ApplicationListener并且向他们发送事件的.
                    initApplicationEventMulticaster();                // 允许context定义一些特殊的初始化过程.
                    onRefresh();                // 检查listener并注册之.
                    registerListeners();                // 实例化剩余的非延时加载的单例.
                    finishBeanFactoryInitialization(beanFactory);                // 把ContextRefreshedEvent这个事件发布出去.
                    finishRefresh();
                }            catch (BeansException ex) {
                    // 销毁所有的单例方式闲置资源.
                    beanFactory.destroySingletons();                // 撤销active标志.
                    cancelRefresh(ex);                // Propagate exception to caller.
                    throw ex;
                }
            }
        }