2019独角兽企业重金招聘Python工程师标准>>>

rose-scanning的功能

  1. 把classpath中使用rose的jar包和folder都生成资源对象,供spring读取里面的bean到beanfactory中(更准确是的RoseAppContext或RoseWebAppContext)。
  2. 自动打开annotation识别,不用再在xml中配置。

处理过程

  1. new RoseAppContext或RoseWebAppContext,后面用RoseAppContext代替。
  2. RoseAppContext构造函数中最后会调用在父类AbstractApplicationContext中实现的的#refresh()方法。
  3. 在#refresh()方法中会调用一些列方法,最后调用到AbstractXmlApplicationContext#loadBeanDefinitions(XmlBeanDefinitionReader reader),这个里面会调用RoseAppContext中重写的#getConfigResources()方法。这个方法是为了获取xml配置文件的位置,然后让后面的reader去读取到Context中。
  4. 在#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))
  5. rose=xxx是有规定的xxx=*,controllers,dao,messages,applicationContext,单独scanning包的话,只有messages和applicationContext。
  6. 不符合规定的xxx(modifiers)会被过滤掉,而符合规定的会被转成Spring的resource,供Spring使用。
  7. 在#refresh()方法中会调用RoseAppContext中重写的prepareBeanFactory()。这个方法在RoseAppContext中只会注册‘注解配置处理器’,而在RoseWebAppContext中除了注册‘注解配置处理器’以外,还会注册获取Message和注册Message

扩展Spring的方式

  1. 在构造函数里面调用refresh方法
  2. 通过重写 getConfigResources和 prepareBeanFactory

阅读建议

  1. 如果不想了解spring,就直接从RoseAppContext#getConfigResources()开始看,这个里面就包含了scanning的主要功能。
  2. 如果想了解Spring就直接从#refresh()中跟。到Spring中的时候最好在旁边放一个context类图,这样才能搞清他们的关系,方便阅读。

其他

  1. RoseScanner是单例模式,里面有classesFolderResources和jarResources,当下次再使用这个类扫描的时候,就会直接返回这两个面的资源

转载于:https://my.oschina.net/yunyue/blog/201880

rose-scanning reading相关推荐

  1. pandas php,pandas分组聚合代码详解

    pandas分组聚合代码详解 本篇文章小编给大家分享一下pandas分组聚合代码详解,对大家学习pandas分组聚合有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看 ...

  2. Simon IELTS: Reading

    文章目录 Reading Lesson 1: Introduction & Techniques Basic Exam Techniques Pieces of Reading Advices ...

  3. 高中计算机第三单元教案,Module2 Unit3 Reading Who Am I ?教学设计(人教版高二英语必修教案教学设计)...

    高二英语组: 杨雪琪 Module2 Unit3 Reading Who Am I ?教学设计 一. 教材分析 1.教学内容分析 Reading 中以别致的标题Who Am I? 引起学生的好奇心,使 ...

  4. Codeforces 460E Roland and Rose(暴力)

    题目链接:Codeforces 460E Roland and Rose 题目大意:在以原点为圆心,半径为R的局域内选择N个整数点,使得N个点中两两距离的平方和最大. 解题思路:R最大为30.那么事实 ...

  5. Laravel Predis Error while reading line from the server.

    问题 Laravel说明文档中的 Redis 发布与订阅案例,命令行运行php artisan redis:subscribe 到60s自动断开并报错 [Predis\Connection\Conne ...

  6. My deep learning reading list

    My deep learning reading list 主要是顺着Bengio的PAMI review的文章找出来的.包括几本综述文章,将近100篇论文,各位山头们的Presentation.全部 ...

  7. Deep Reading | 从0到1再读注意力机制,此文必收藏!

    译者 | forencegan 编辑 | 琥珀 出品 | AI科技大本营(ID: rgznai100) [AI科技大本营导语]注意力机制(Attention)已经成为深度学习必学内容之一,无论是计算机 ...

  8. 报错解决transmission: Error: Input/Output error和ls: reading directory '': Input/output error

    transmission: Error: Input/Output error 晚上想用transmission下载新的种子时报错:Error: Input/Output error. 我很奇怪,先运 ...

  9. Rational Rose打开方式

    Rational Rose打开方式 rational Rose出现打不开的情况,可以在我的电脑中c盘目录下搜索flexlm.cpl 打开后的界面 点击Setup,查看并检查修改配置是否正确 检查完毕后 ...

最新文章

  1. 高亮提示、聚焦控件并滚动到浏览器中干好可以查看到该控件的位置
  2. 对MVC、MVP、MVVM的理解
  3. NYOJ 970 Yougth's Game II
  4. .NET托管内存类应用的内存泄漏分析和诊断(转)
  5. 西门子s7 计算机通讯,PLC与计算机通讯连接
  6. hibernate 一对多_为什么很多人不愿意用hibernate了?
  7. 解决Rational Rose找不到suite objects.dll文件的问题
  8. 嵌入式系统开发笔记19:CJ/T-188 冷热量表协议解析8
  9. cefsharp启动优化
  10. 《次第花开》学习笔记
  11. excel标题行列浮动显示/冻结窗口
  12. 事务处理 :本地 、全局、分布式
  13. 8个程序员专用软件/网站,个个是神器,第一个最惊喜......
  14. OpenCV drawMatches出现报错Error: Assertion failed
  15. mysql忘记密码(无秘登录)for Linux
  16. 考研数据结构之查找(9.8)——练习题之使用散列函数H(k)= 3k mod 11并采用链地址法处理冲突并构造散列表及设计散列表的完整算法(C表示)
  17. 利用类权重来改善类别不平衡
  18. 什么是暂时性死区(TDZ)?
  19. 小H和游戏(树形结构)
  20. VS 2019中利用C#语言在.Net Framework 4.5框架上开发简易倒计时器

热门文章

  1. Phoenix+Hbase二级索引
  2. 【WCF】错误处理(二):错误码―—FaultCode
  3. 【thinkphp3.x】ThinkPHP/Lib/Core/Model.class.php文件分析
  4. 【Android】16.5 Android内置的系统服务
  5. Ettus Research USRP B200/B210 simple case
  6. va_start和va_end的使用及原理
  7. [oracle 10g]命令行启动ORACLE服务及顺序
  8. SMS2003 推送软件包中的日志查看及安装错误代号1633分析
  9. 485. 最大连续1的个数
  10. 【毕业设计】jsp+sql毕业选题系统(论文)