`
leogao_emcom
  • 浏览: 81217 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论
文章列表
在上一篇,我们看到这样的代码:   DefaultListableBeanFactory beanFactory = createBeanFactory(); .... synchronized (this.beanFactoryMonitor) { this.beanFactory = beanFactory; }   知道Application将getBean方法的实现委托给了DefaultListableBeanFactory,在DefaultListableBeanFactory按F4键我们可以看到这样的继承结构:   其中XmlBeanFactory我们经常用到, ...
首先,必须先在[/size]Spring源代码中,找到IOC的入口点,也就是IOC的启动点,我们经常用Spring框架,知道ApplicationContext和BeanFactory启动的方式,有很多种,我们先排除Spring Web框架或者Struts2 框架的方式,而是寻找最简单的方式,以便能排除环境的因素而找到最纯的一个实现,而我们在使用Spring最简单的方式是:假设所有的需要配置的类都已经实现完毕,配置文件也写好,那么 ApplaictionContext context=new FileSystemXmlApplicationContextIMyObject Obj=(IMyOb ...
}               else {                   if ( this . logger .isInfoEnabled()) {                      this . logger .info( "Overriding bean definition for bean '" + beanName +
this . readerContext .getRegistry(), true );                   }                   else {                      // 如果 Bean 为空,就在这里注册一个 Class 全局限定名                      beanName = this . readerContext .generateBeanName(beanDefinition);
好了!这里又出现了新的类型 BeanDefinitionParserDelegate 干什么用的?不过我知道这肯定和 XML 解析有关,所以不容错过!于是乎,简单浏览了一下它的实现(怕进入代码丛林!),我的天啊,我找到正题了: public class BeanDefinitionParserDelegate {       public static final String BEANS_NAMESPACE_URI = "http://www.springframework.or ...
protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException {  XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);  //从这块代码       可以发现XML的解析估计是在这里发生的,也就是这个Reader来读取的,        ....        loadBeanDefinitio ...
呵呵,无论从调用关系、方法名称和注释都能敏感的感觉到找对地方了, prepareRefresh 的注释写“ refreshing” ,真搞不清这个概念,先进去看看: protected void prepareRefresh() { this.startupDate = System.currentTimeMillis(); synchronized (this.activeMonitor) { this.active = true; } if (logg ...
(事先用Word写好的,再贴上来,格式有点...,有时间再调整,如果看不清楚,请直接下载我写的Word文档,在-6第六篇文章中,有错别字就别怪我了,没有时间检查) 对于 Java 开发者来说,经常会用到一个框架 —Spring, 但是从用的角度来讲,很多人已经认为比较“复杂”了,但是我认为这个和思维方式有关,当人看到一个电视机,然后看完说明书(相当于 Spring 的用户文档),最后在磕磕碰碰的点击各种按钮后电视机开始工作了,但是他某一天想让电视机能干点说明书描述的东西以外的事情的时候,现在的电视机也就无能为力了,比如他想让电视机能够具备播放 ...
我曾经为之服务的一家公司,由于新项目的特点,也为了在公司的方法论资产做一个积累和提高,并且在详细调研了Scrum方法之后,公司老板作出决定,在E-Notebook项目中,开始采用敏捷开发方法,最近有空将其整理出来,做个留 ...
在我不断地从一种技术玩到另外在一种的时候,总是觉得时曾相识,原因很简单,无论你是用C在Linux上搞开发,还是用java/.net等等,都是建立在一个理论体系上,对于JavaEE和.Net则是面对企业级应用市场的时候,它们的共同点就更加多了,比如:在表现层:.Net有ASP.Net,Java有JSP. 但是ASP.net更加”厚“一些,我们可以开发各种服务器端控件,使用和JSP类似的Session、Application等对象模型,我们可以重载Page类或者Control中的方法来管理ASP.net page或者控件的声明周期,我们可以使用监听器来管理JSP的生命周期,JSP可以使用标签库来展现 ...
我的笔记本是Thinkpad T410,配置如下: CPU i5 540  2.83 GHZ Mem:6GB Disk:320G 7200 RPM Display:NVS 3100m   下载了一个ubuntu 64bit DVD iso http://www.ubuntu.com/desktop 刻录成光盘,然后用此光盘启动Thinkpad. 进入画面后,选择中文,然后按提示操作。 ...
锁 锁是用来锁东西的,让别人打不开也看不到!在线程中,用这个“锁”隐喻来说明一个线程在“操作”一个目标(如一个变量)的时候,如果变量是被锁住的,那么其他线程就对这个目标既“操作”不了(挂起)也无法看到目标的内容!对Java并发包,锁的实现基本在java.util.concurrent.locks包中,说“基本”是因为,在java.util.concurrent中还有CountDownLatch(可以看成带计数器的锁),CyclicBarrier,Semaphore(类似于信号量,但是也可以看成一个特殊的锁)。这里我们先以java.util.concurrent.locks包为主来讨论锁的问题吧 ...
Exchanger Exchanger 类方便了两个共同操作线程之间的双向交换; Exchanger 通常用于一个线程填充缓冲,而另一个线程清空缓冲的情况。当两个线程在屏障处集合时(交换点),它们交换缓冲,为了解释Exchanger的使用方法,先看看其实现原理,在Exchanger中最核心的方法是exchange, 其JDK的实现是: public V exchange(V x) throws InterruptedException { if (!Thread.interrupted()) { Object v = doExchange(x = ...
我们现在来看看CompletionService : package ExecutorDemos; import java.util.concurrent.Callable; import java.util.concurrent.CompletionService; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import ja ...
前面文章用直接使用Thread类的start方法来新启动一个线程,看起来貌似没有什么问题,问题就在于线程使用场景的需求上,如果希望每个一段时间自动运行一次这个线程,如果想使用线程池,这个Start方法就完全不够了。 下面我 ...
Global site tag (gtag.js) - Google Analytics