java委派_Spring中的委派模式

最近听了讲解spring源码的课,其中对委派模式有点不甚理解。我理解的委派模式就是个中介。类A封装了类B的方法,从而别的类只要调类A就行了,不需要知道类B的存在。

但是在课中,听到的委派模式和我理解的不一样。

以下是spring中的源码 - 5.0.2版本

ps:我是从FileSystemXmlApplicationContext中的构造器中的refresh()方法开始往下看的

例子1:AbstractApplicationContext类

protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {

//这里使用了委派设计模式,父类定义了抽象的refreshBeanFactory()方法,具体实现调用子类容器的refreshBeanFactory()方法

refreshBeanFactory();

ConfigurableListableBeanFactory beanFactory = getBeanFactory();

if (logger.isDebugEnabled()) {

logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory);

}

return beanFactory;

}

例子2:AbstractRefreshableApplicationContext类

@Override

protected final void refreshBeanFactory() throws BeansException {

//如果已经有容器,销毁容器中的bean,关闭容器

if (hasBeanFactory()) {

destroyBeans();

closeBeanFactory();

}

try {

//创建IOC容器

DefaultListableBeanFactory beanFactory = createBeanFactory();

beanFactory.setSerializationId(getId());

//对IOC容器进行定制化,如设置启动参数,开启注解的自动装配等

customizeBeanFactory(beanFactory);

//调用载入Bean定义的方法,主要这里又使用了一个委派模式,在当前类中只定义了抽象的loadBeanDefinitions方法,具体的实现调用子类容器

loadBeanDefinitions(beanFactory);

synchronized (this.beanFactoryMonitor) {

this.beanFactory = beanFactory;

}

}

catch (IOException ex) {

throw new ApplicationContextException("I/O error parsing bean definition source for " + getDisplayName(), ex);

}

}

还有很多....都说是用了委派设计模式(也没说为什么..不然我也不会到这问了..)。但是我没看出来是用了委派模式,这不就是继承了父类,实现了父类定义的方法,那当然调用方法时,执行的是子类的方法了。委派模式的特点跟这个好像一点关系都挂不上。

委派模式的特点:

1、类似于中介的功能(委托机制)

2、持有被委托人的引用

3、不关心过程,只关心结果

google了很多,对于委派模式在spring中的体现好像资料很少,以至于没搜到啥。甚是不解呀,身边没有精通spring源码的人,所以无从下手,只好在此发问,望有大神能回复给我一个思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值