【重要】Spring在web.xml中的配置原理说明

Spring原理说明:

// 方式零:就在实现类中改,用哪个改哪个
// new出来的,耦合性太强,依赖于具体的实现类,如果我具体的实现类变了,那么这里的接口代码也得跟着变,这样不好。
// private IUserDao dao = new IUserDaoImpl(); 
// private IUserDao dao = new IUserDaoImplForOracle(); 


// 方式一:不在实现类中修改,在工厂类中改forName的参数
// private IUserDao dao = BeanFactory.newInstance().getUserDao(); 

// 方式二:不在工厂类中修改,在配置文件中修改,拿到的是普通对象,是我自己去生成
// private IUserDao dao = (IUserDao) BeanFactory.newInstance().getDao("USERDAO"); 
// private IUserDao dao1 = (IStudentDao) BeanFactory.newInstance().getDao("STUDENT"); 

// 方式三:不在工厂类中修改,在配置文件中修改,拿到的是代理对象,让代理对象帮我生成,我去这是最懒的方式啊!
private IUserDao dao = (IUserDao) BeanFactory.newInstance().getProxyDao("USERDAO"); 

// 每次想用这个代理类对象的时候,每次都会生成,但是IUserDao对象,我只需要getXxx()生成一次就够了,以后就是调用里面的方法了,并没有赋值操作。
// 回想我们为什么使用数据库连接池呢?答:因为与数据库连接是最耗时的,即getConnection。
// 我们使用数据库连接池的目的就是把这个最耗时的操作放在最开始的时候,就是服务器启动的时候,因为服务器启动的时候,大家都在等待。

// 同理,在服务器启动的时候,那我们能不能把生成代理对象的操作放在某个地方放好,让他们先等着?答:当然能啊!我们可以把他们放在一个全局的域中(一个Map里)。
// 为什么是“放”呢?答:因为只有取操作,没有赋值操作。
// 怎么做呢?答:那就初始化一个容器(一个Map容器)。
// 我怎么知道你启动了呢?即什么时候初始化一个容器呢?答:使用服务器监听器.
// ServletContextListener,这个监听器监听application域的创建和销毁,因为服务器一启动,应用就被加载。监听器就可以监听到。

// 那Spring做的是什么事呢?答:就是在服务器启动的时候,给你初始化一个这样的容器,把所有要用的代理对象都扔到里面,你想用的话,就从里面取出就行。
// 所以Spring在web.xml中的就是配置实现了一个实现了ServletContextListener接口的监听器。

下面这张图片里面的知识非常重要,对理解Spring原理很有帮助,请下载观看:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java编程技术

高并发编程必备基础(上)

借用Java并发编程实践中的话"编写正确的程序并不容易,而编写正常的并发程序就更难了",相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没...

11220
来自专栏IT杂记

Java Socket Timeout总结

1. Socket timeout     Java socket有如下两种timeout: 建立连接timeout,暂时就叫 connect timeout;...

1.1K90
来自专栏蓝天

C/C++常见gcc编译链接错误解决方法

用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysq...

55730
来自专栏FreeBuf

Android漏洞CVE-2015-3825分析及exploit实战:从Crash到劫持PC

* 本文原创作者: thor@MS509Team,本文属FreeBuf原创奖励计划,未经许可禁止转载 CVE-2015-3825是去年Android系统爆出的高...

35960
来自专栏养码场

Java后端开发面大集锦1.0,汇集了各大公司的面试点!你都能答上来吗?

各位在面试时,必然会遇到各位的技术问题。这次针对Java后端开发,以下这篇文章罗列了各大公司技术面试官可能会提及的问题,并做出了解答。若觉得不错,希望分享给更多...

7730
来自专栏码云1024

c++DLL编程详解

57760
来自专栏Android 开发学习

Android内存泄漏分析总结

21340
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第9章 轻量级线程:协程(2)《Kotlin极简教程》正式上架:

如果需要依次调用它们, 我们只需要使用正常的顺序调用, 因为协同中的代码 (就像在常规代码中一样) 是默认的顺序执行。下面的示例通过测量执行两个挂起函数所需的总...

16220
来自专栏大内老A

ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事

从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCor...

237100
来自专栏MongoDB

MongoDB基础概念与事务支持

MongoDB4.0新增了对事务的支持,本文首先介绍一些MongoDB的基础概念,后文会对4.0新增的事务功能进行解读

1.5K200

扫码关注云+社区

领取腾讯云代金券