锁定老帖子 主题:spring源码分析-浅淡工厂模式的应用
精华帖 (0) :: 良好帖 (2) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-09
最后修改:2010-07-09
当然这只是冰山之一角。各位如果觉得太简单,只当路过而已 。 我们都知道工厂模式是GOF23中设计模式之一,属于创建模式的一种。 而工厂模式又细分为工厂方法和抽象工厂。 简单的来说,工厂方法直接在工厂里返回所需求的实例。针对只创建一种“产品”时使用。 而抽象方法则是用在创建多个“产品”的情况下,把创建“产品”的过程延迟到了子类中,只留下了一个抽象的创建方法。 下面我们来看一下spring中ApplicationContext及子类的对于工厂方法的使用。 我们先来看一看ClassPathXmlApplicationContext的继承结构: 在抽象类AbstractRefreshableApplicationContext中有getBeanFactory()的定义 /** * Subclasses must return their internal bean factory here. They should implement the * lookup efficiently, so that it can be called repeatedly without a performance penalty. * <p>Note: Subclasses should check whether the context is still active before * returning the internal bean factory. The internal factory should generally be * considered unavailable once the context has been closed. * @return this application context's internal bean factory (never <code>null</code>) * @throws IllegalStateException if the context does not hold an internal bean factory yet * (usually if {@link #refresh()} has never been called) or if the context has been * closed already * @see #refreshBeanFactory() * @see #closeBeanFactory() */ public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException; 当然,此方法是其实现的接口ConfigurableApplicationContext中的一个方法。如下: public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean { ... } 我们来看看ConfigurableApplicationContext 的定义 public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle { ... ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException; } 而getBeanFactory()方法却在AbstractRefreshableApplicationContext类中被大量的使用了,随便举一二例: protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) { ... } 又如: protected void initLifecycleProcessor() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); if (beanFactory.containsLocalBean(LIFECYCLE_PROCESSOR_BEAN_NAME)) { ... } 而直到其子类AbstractRefreshableApplicationContext中,才得以实现: @Override public final ConfigurableListableBeanFactory getBeanFactory() { synchronized (this.beanFactoryMonitor) { if (this.beanFactory == null) { throw new IllegalStateException("BeanFactory not initialized or already closed - " + "call 'refresh' before accessing beans via the ApplicationContext"); } return this.beanFactory; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-09
没看明白你想说明什么。简单贴下代码而已
|
|
返回顶楼 | |
发表时间:2010-07-10
修改一下.
没看懂. |
|
返回顶楼 | |
发表时间:2010-07-10
ls的真笨 lz 那意思 他叫你自己去想去 就像我给你写个接口是的 自己去实现
lz同样说个标题内容自己去想么 呵呵 |
|
返回顶楼 | |
发表时间:2010-07-10
最后修改:2010-07-10
分析在哪里
|
|
返回顶楼 | |
发表时间:2010-07-10
最后修改:2010-07-10
大家真的不知道我在说什么吗,可能是我的文字表达能力太差。也可能是我说的过于简单。
最近在读spring源码,把里面的一些感想,尤其是spring里用到的设计模式跟大家共享,希望能起到抛砖引玉的效果。标题中的“浅谈”就是这个意思。哈哈 以后我会在文字逻辑上多下点功能,也希望各位多多提意见 ~~~~ |
|
返回顶楼 | |
发表时间:2010-07-11
好多人都分析过,更多的人都在浅谈。
|
|
返回顶楼 | |
发表时间:2010-07-11
jakoes 写道
大家真的不知道我在说什么吗,可能是我的文字表达能力太差。也可能是我说的过于简单。
最近在读spring源码,把里面的一些感想,尤其是spring里用到的设计模式跟大家共享,希望能起到抛砖引玉的效果。标题中的“浅谈”就是这个意思。哈哈 以后我会在文字逻辑上多下点功能,也希望各位多多提意见 ~~~~ JavaEye 上关于 Spring 源代码分析是比较多了,甚至还有一个专栏呢。不过,看了楼主的分析还是有些许收获的,所以我点了“良好贴”。
但是我个人比较期待的,关于 Spring 的接口和类的命名分析却没有。比如像 ConfigurableApplicationContext 这个接口的命名,就字面意义上是不难理解,但是其中的 Configurable 这个单词在整个 Spring 的上下文命名体系中有什么规范的含义呢;类似的还有 AbstractRefreshableApplicationContext 中的 Refreshable;再比如 ConfigurableListableBeanFactory 中的 Listable,它表示了这种类型的 BeanFactory 有什么额外的功能呢?
所以,我期待以后能在楼主的关于 Spring 源代码分析的帖子中看到这方面的内容,而且我觉得对于框架源代码的初学者,先了解这些内容比先去弄懂各种复杂的继承和实现机制更为重要! |
|
返回顶楼 | |
发表时间:2010-07-12
工厂 + 单例 - -? |
|
返回顶楼 | |
发表时间:2010-07-12
不懂你在说的
|
|
返回顶楼 | |