rose-scanning reading
2019独角兽企业重金招聘Python工程师标准>>>
rose-scanning的功能
- 把classpath中使用rose的jar包和folder都生成资源对象,供spring读取里面的bean到beanfactory中(更准确是的RoseAppContext或RoseWebAppContext)。
- 自动打开annotation识别,不用再在xml中配置。
处理过程
- new RoseAppContext或RoseWebAppContext,后面用RoseAppContext代替。
- RoseAppContext构造函数中最后会调用在父类AbstractApplicationContext中实现的的#refresh()方法。
- 在#refresh()方法中会调用一些列方法,最后调用到AbstractXmlApplicationContext#loadBeanDefinitions(XmlBeanDefinitionReader reader),这个里面会调用RoseAppContext中重写的#getConfigResources()方法。这个方法是为了获取xml配置文件的位置,然后让后面的reader去读取到Context中。
- 在#getConfigResources()方法中调用RoseResources#findContextResources(),这个方法会根据new Context的时候传的scope来查找配置成Rose的Jar或者Folder。是通过写META-INF/rose.propertie或者manifest写rose=xxx来配置成Rose。如果写了rose=xxx就会被构建成ResourceRef(resource(jar or folder) + modifiers(xxx))
- rose=xxx是有规定的xxx=*,controllers,dao,messages,applicationContext,单独scanning包的话,只有messages和applicationContext。
- 不符合规定的xxx(modifiers)会被过滤掉,而符合规定的会被转成Spring的resource,供Spring使用。
- 在#refresh()方法中会调用RoseAppContext中重写的prepareBeanFactory()。这个方法在RoseAppContext中只会注册‘注解配置处理器’,而在RoseWebAppContext中除了注册‘注解配置处理器’以外,还会注册获取Message和注册Message
扩展Spring的方式
- 在构造函数里面调用refresh方法
- 通过重写 getConfigResources和 prepareBeanFactory
阅读建议
- 如果不想了解spring,就直接从RoseAppContext#getConfigResources()开始看,这个里面就包含了scanning的主要功能。
- 如果想了解Spring就直接从#refresh()中跟。到Spring中的时候最好在旁边放一个context类图,这样才能搞清他们的关系,方便阅读。
其他
- RoseScanner是单例模式,里面有classesFolderResources和jarResources,当下次再使用这个类扫描的时候,就会直接返回这两个面的资源
转载于:https://my.oschina.net/yunyue/blog/201880
rose-scanning reading相关推荐
- pandas php,pandas分组聚合代码详解
pandas分组聚合代码详解 本篇文章小编给大家分享一下pandas分组聚合代码详解,对大家学习pandas分组聚合有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看 ...
- Simon IELTS: Reading
文章目录 Reading Lesson 1: Introduction & Techniques Basic Exam Techniques Pieces of Reading Advices ...
- 高中计算机第三单元教案,Module2 Unit3 Reading Who Am I ?教学设计(人教版高二英语必修教案教学设计)...
高二英语组: 杨雪琪 Module2 Unit3 Reading Who Am I ?教学设计 一. 教材分析 1.教学内容分析 Reading 中以别致的标题Who Am I? 引起学生的好奇心,使 ...
- Codeforces 460E Roland and Rose(暴力)
题目链接:Codeforces 460E Roland and Rose 题目大意:在以原点为圆心,半径为R的局域内选择N个整数点,使得N个点中两两距离的平方和最大. 解题思路:R最大为30.那么事实 ...
- Laravel Predis Error while reading line from the server.
问题 Laravel说明文档中的 Redis 发布与订阅案例,命令行运行php artisan redis:subscribe 到60s自动断开并报错 [Predis\Connection\Conne ...
- My deep learning reading list
My deep learning reading list 主要是顺着Bengio的PAMI review的文章找出来的.包括几本综述文章,将近100篇论文,各位山头们的Presentation.全部 ...
- Deep Reading | 从0到1再读注意力机制,此文必收藏!
译者 | forencegan 编辑 | 琥珀 出品 | AI科技大本营(ID: rgznai100) [AI科技大本营导语]注意力机制(Attention)已经成为深度学习必学内容之一,无论是计算机 ...
- 报错解决transmission: Error: Input/Output error和ls: reading directory '': Input/output error
transmission: Error: Input/Output error 晚上想用transmission下载新的种子时报错:Error: Input/Output error. 我很奇怪,先运 ...
- Rational Rose打开方式
Rational Rose打开方式 rational Rose出现打不开的情况,可以在我的电脑中c盘目录下搜索flexlm.cpl 打开后的界面 点击Setup,查看并检查修改配置是否正确 检查完毕后 ...
最新文章
- 高亮提示、聚焦控件并滚动到浏览器中干好可以查看到该控件的位置
- 对MVC、MVP、MVVM的理解
- NYOJ 970 Yougth's Game II
- .NET托管内存类应用的内存泄漏分析和诊断(转)
- 西门子s7 计算机通讯,PLC与计算机通讯连接
- hibernate 一对多_为什么很多人不愿意用hibernate了?
- 解决Rational Rose找不到suite objects.dll文件的问题
- 嵌入式系统开发笔记19:CJ/T-188 冷热量表协议解析8
- cefsharp启动优化
- 《次第花开》学习笔记
- excel标题行列浮动显示/冻结窗口
- 事务处理 :本地 、全局、分布式
- 8个程序员专用软件/网站,个个是神器,第一个最惊喜......
- OpenCV drawMatches出现报错Error: Assertion failed
- mysql忘记密码(无秘登录)for Linux
- 考研数据结构之查找(9.8)——练习题之使用散列函数H(k)= 3k mod 11并采用链地址法处理冲突并构造散列表及设计散列表的完整算法(C表示)
- 利用类权重来改善类别不平衡
- 什么是暂时性死区(TDZ)?
- 小H和游戏(树形结构)
- VS 2019中利用C#语言在.Net Framework 4.5框架上开发简易倒计时器
热门文章
- Phoenix+Hbase二级索引
- 【WCF】错误处理(二):错误码―—FaultCode
- 【thinkphp3.x】ThinkPHP/Lib/Core/Model.class.php文件分析
- 【Android】16.5 Android内置的系统服务
- Ettus Research USRP B200/B210 simple case
- va_start和va_end的使用及原理
- [oracle 10g]命令行启动ORACLE服务及顺序
- SMS2003 推送软件包中的日志查看及安装错误代号1633分析
- 485. 最大连续1的个数
- 【毕业设计】jsp+sql毕业选题系统(论文)