2.
SPring 大胆提出一个猜想,通过Spring java,
达到,没有xml 如何配置
通过servelt 3.0 如何配置过滤器,等web 三大组件。
继承httpServlet ,使用@webservlet,("avalue"),同样都可以配置,
工程一起完全OK ,点如何访问tulingHello ,跑一下工程,访问Hello,得出一个注解,
servetwebSevlet 可以配置三个组件,除了web.xml 注解,这种方式
3.还有没有第三种方式:
使用SPI,
调用方法,部署到tomcat 上去了,改是改好好了,代码已经部署到服务器上,是增量部署还是全量
部署,编译期间非常容易出错,传统的SPI的方式,满足3个需求,Servletsload 这个类,没有为什么,
说,通过一个迭代器思想的完成,看一下解析excel ,切换过来,这就是SPI思想。
java 类加载器,Servceilaod ,打破双亲委派机制。
要求目录下面创建一个机制,自然而然的想到了SPI。
写一个文件内容,必须是接口的实现类,initlazie,接口下去onstatup 方法,貌似是个set 集合,应用 上下文,
我们拿到这个此时的angleServlet 是没有标示注解的的,现在一旦返回这个路径,说明,这种SPI方式添加Servlet。
跑起来,AngeServle,再回过头来,官方文档,感兴趣的类型,servet ,
伪代码的时候:
tomcat 启动的时候,创建SPI机制,传送2个机制,,标识这个实现类,都传到这个集合来,
源码的过程中,伪代码的过程中通过SPI的机制,读取文件下来的编程一个对象。
伪代码{
SPi 读取到我们的comxxxContaininilaizer:
class clazz=new class();
通过反射来做的,
}
如果集合不为空的化,并且该实现该类的接口,通过反射,加入到集合中去。穿几区的,正真的哦是,大家一定要全程关注的跟住老师的思路。
spring 依赖web工程之后,以及ServleSerive 中法,先不看这个东西是如何来的,
说明什么意思,官网上说的,webApplcition 之后,几行配置,作用等同于这个,几行配置,创建一个IOC容器,
相当于配置,什么时候调用的是怎么调用到这个类。
文件中,Springtulingspring 开头的,我们完全的点开这个类,怎么一个中文的。编译源码是什么好处,
通过。Spring源码编译的教程,回到代码中来,这个类是Spring 的有了类,webapplcationlize 这个接口会
传到这个接口的集合中,非空判断,不是接口,不是抽象类,通过反射,加入到这个结合中,
打印I这个结合中,假如说,有多个,那个类先执行,inizliazer,onstartup webpplcaiton ,是不是
可以调用过来的。
直接实现顶层接口,很多接口,细粒度的,这个接口具体的抽象类的呢,点到这个接口。看一下该类的集成树的结构。
三个抽象类,想到这里,我们把这个,断点的方式起来来,tomcat 起来来之后,debug 模式启动,
有5个,过滤是自己的,过滤器抽象类的,排序代码挺到这个initliaze,
父类,找一群onstartup方法,直接按f8 讲究了,直接到了两行代码父类的代码,他的父类,为什么难,去调用,F5进去,onstartup,
这个方法,f5 进去,注册监听,创建根容器,父子容器,代码调用脸,抽象方法,这个子类没有,create,调到这个断点上来,
抽象方法,留给子类实现,getRoot.Java配置版本中,git 谁提供的,搜索的,getrootconfigclass,子类我们自己写的。
自己写的类,start initizlity ,配置类,相当于配置文件,返回一个跟容器,IOC的容器,配置类,set 到,这种方式,
是一个空的容器,创建一个空的容器,context不就相等于,记住,跟容器,代码COPY下来创建添加到任何低吗注视到,
//1.注释掉一个空的父类,把父配置类保存到父容器中
//2.添加igecontexloaderListner 对戏那个,把父容器作为成员变量传入到contetLoadedListener对象中
//3.添加到我们的监听
super.onstatup(servletContext);
//1.创建一个空的自容器,把自配置类把醋懂啊
创建子容器中,代码停留到这个位置,reigster dispathc serlet 中,其实我们知道,留给我们子类实现,
创建一个新的子容器中,把子配置类中创建空的子容器中,创建空的子容器中,dispatch servlet 中去,添加我们的dispathcServlet
添加一个新的mapping ,通过java 代码,
registrtDispatchSerlet(servlet); 没有什么父亲容器的配置
没有controlller 的,没有dao,也是一个listern,init 方法,
判断容器有没有激活过,reflush 方法,标识设置为true,下面的逻辑代码,父子容器,这里处理的是父容器的功能,
只有子容器才能有对应的容器,parent 才是空,就到了。
refresh 刷新dao ,添加到我们的工程,判断我们最最核心的是, contextId 进来,很多代码是没有关系的,最最核心的就是
reflush ,
实例化我们的容器SingleObjects。单利缓冲池,执行到
Spring{
1.Spring aop 切面解析
2.Spring 动态代理对像生成
3.Spring动态递归方法:
}