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