1.源码分析Mybatis 看源MapperProxy初始化【文并茂】
2.IDEA的这个功能太赞了!
3.å
è´¹å¨çº¿ç±»å¾ç»å¶-å¦ä½å¨å¾ä¹¦ç®¡çç³»ç»ä¸è¾åºå¾è¡¨
源码分析Mybatis 码样MapperProxy初始化【文并茂】
源码分析Mybatis MapperProxy初始化,本文基于Mybatis.3.x版本,画类画类展现作者阅读源码技巧。图看图MapperScannerConfigurer作为Spring整合Mybatis的代码核心类,负责扫描项目中Dao类,看源前端源码和后端源码并创建Mybatis的码样Maper对象即MapperProxy对象。
在项目配置文件中,画类画类关注到与Mapper相关的图看图配置信息。源码分析的代码行文思路如下,可能会比较枯燥,看源但先给出MapperProxy的码样创建序列图,有助于理解。画类画类
MapperScannerConfigurer类图,图看图实现Spring Bean生命周期相关功能。代码核心类及其作用简述如下:
BeanDefinitionRegistryPostProcessor负责设置SqlSessionFactory,生成的灯具公司网站源码Mapper最终受该SqlSessionFactory管辖。
ClassPathMapperScanner的scan方法进行扫描动作,具体实现由ClassPathBeanDefinitionScanner的doScan方法和ClassPathMapperScanner的内部方法共同完成。
ClassPathMapperScanner#doScan方法首先调用父类方法,接着配置文件并构建对应的BeanDefinitionHolder对象。对这些BeanDefinitions进行处理,对Bean进行加工,加入Mybatis特性。
MapperFactoryBean作为创建Mapper的源码的安装部署FactoryBean对象,其beanClass为MapperFactoryBean,初始化实例为MapperFactoryBean。在实例化时自动获取SqlSessionFactory或SqlSessionTemplate,用于创建具体的Mapper实例。
MapperFactoryBean的checkDaoConfig方法实现Mapper与Mapper.xml文件的关联注册。MapperRegistry负责管理注册的Mapper,核心类图展示了其关键属性和方法。
MapperRegistry#addMapper方法完成MapperProxy的云南智慧农业源码注册,但实际的MapperProxy创建在getMapper方法中,根据接口获取MapperProxyFactory,调用newInstance创建MapperProxy对象。
至此,Mybatis Mapper的初始化构造过程完成一半,即MapperScannerConfigurer通过包扫描,构建MapperProxy。剩余部分,java语言源码分析即MapperProxy与*.Mapper.xml文件中SQL语句的关联流程,将在下一篇文章中详细说明。通过MapperProxy对象的创建,为后续SQL执行流程做准备。
更多文章请关注:线报酱
IDEA的这个功能太赞了!
通过使用 IntelliJ IDEA 的类图功能,查看类的继承关系和接口实现变得一目了然,极大地提高了学习效率。操作方法如下:
1. 在类标签页内,右键点击选择“Diagram”,选择“show”新建在标签页内或“show ... Popup”以浮窗形式展示。也可从项目目录树中对类右键选择“Diagrams”。
2. 显示的图中,蓝色实线箭头代表继承关系,绿色虚线箭头代表接口实现关系。
3. 为优化图形,可删除不关心的类。通过选择并使用键盘上的delete键移除。
4. 需要查看类的详细信息时,右键选择“show categories”展开属性、方法、构造方法等。调整类权限显示,或使用Alt键放大图形。
5. 若需查看与其他类的继承关系,右键选择“Add Class to Diagram”并输入类名。图形中会显示类间的关系。
6. 双击类后,通过方法列表快速定位并右键选择“Jump to Source”查看方法源码。利用IDEA的structure功能,可在类内快速跳转查看其他方法。
使用 IntelliJ IDEA 的这些功能,学习和查看类关系,理解框架源码等变得非常便捷,大大提升了学习和开发效率。
å è´¹å¨çº¿ç±»å¾ç»å¶-å¦ä½å¨å¾ä¹¦ç®¡çç³»ç»ä¸è¾åºå¾è¡¨
ç±»å¾æä¹ç»
ç»ç±»å¾ä¸è¬æ以ä¸3个æ¥éª¤:ç¡®å®ç±»,è¯å«ç±»çå±æ§åæä½,ç»ç»ç±»å¹¶ç¡®å®å ¶å ³ç³»ãå¦ä¸:
1ãç¡®å®ç±»ãç¡®å®ç±»æ¯éè¿å¯¹è½¯ä»¶éæ±çåææ¥å®æçã常ç¨çæ¹æ³å æ¬è¡ä¸ºåæãåè¯è¯å«æ³ãCRCåæççãå ¶ä¸çåè¯è¯å«æ³å°±æ¯é¦å æéæ±æè ç¨ä¾æè¿°ä¸çææçåè¯æ è¯åºæ¥,æå®ä»¬ä½ä¸ºåéç±»,ç¶åå对è¿äºåéç±»é个è¿è¡èå¯,å»æä¸äºä¸å¿ è¦çç±»ã
2ãåºåæ¯ç±»è¿æ¯å±æ§ãæäºæ è¯åºæ¥çåéç±»,å®é ä¸æ´éåä½ä¸ºç±»çå±æ§,èä¸éåå®ä¹æç±»ãæ¯å¦ä¼åç¼å·,ä¼åç±»åè¿äºå°±éåå®ä¹ä¸ºä¼åç±»çå±æ§ã
3ãç»ç»ç±»å¹¶ç¡®å®å ¶å ³ç³»ãç±»ä¸ç±»ä¹é´çå ³ç³»æä¾èµãæ³åãå®ç°åå ³èãå¨è¯å«åºäºç±»ãç±»çå±æ§åæä½ä¹å,å°±è¦ç»ç»è¿äºç±»å¹¶ç¡®å®ç±»ä¹é´çå ³ç³»ãæ们é常æ¯ä»¥ç±»å¾çå½¢å¼æ¥æè¿°ç±»åå ¶å ³ç³»ã
ç»ç»ç±»å¹¶ç¡®å®å ¶å ³ç³»é常å为以ä¸4个æ¥éª¤:
1ãç¡®å®ç±»ä¹é´çå ³èå ³ç³»å¹¶æ è¯å ¶å¤éæ§ã
2ã使ç¨ç»§æ¿å ³ç³»ç»ç»ç±»ã
3ãç¡®å®æ´ä½åé¨åçå ³ç³»ã
4ãç»å¶ç±»å¾ã
å¦ä½å¨å¾ä¹¦ç®¡çç³»ç»ä¸è¾åºå¾è¡¨weixin_
å ³æ³¨
å®æå¾ä¹¦ç®¡çç³»ç»ç±»å¾çç»å¶_å¦ä½å¨çº¿å è´¹ç»å¶åç±»å¾å½¢
--::
weixin_
ç é¾5å¹´
å ³æ³¨
ä»ç»ä¸ä¸éè¿å¨çº¿å è´¹å¶å¾ç½ç«FreedgoDesignç»å¶åç±»å¾å½¢çæ¹æ³ã
ä»ä¹æ¯FreedgoDesign?
FreedgoDesignæ¯ä¸in款å¨çº¿ç»å¶ä¸ä¸å¾å½¢çç½ç«ãFreedgoDesignå¯ä»¥ç»å¶åç§ç±»åçå¾å½¢,é对ä¸å¡é»è¾çæµç¨å¾,软件设计ER模æ¿,å·¥ä½æµ,åç§äºå¹³å°çç³»ç»é¨ç½²æ¶æå¾å æ¬é¿éäºãAWSäºãè ¾è®¯äºãOracleãAsureäºãIBMäºå¹³å°çã
使ç¨
ç¨æ·éè¿æµè§å¨è®¿é®ç½å:
ç¹å»å¨çº¿å¶å¾,è¿å ¥å¾å½¢è®¾è®¡å·¥å ·é¡µé¢å³å¯å¨çº¿å¶å¾.
éæ©å¶å¾ä¸åç±»åçå¾å½¢,请ç¹å»é¡µé¢ä¸é¢+æ´å¤å¾å½¢,éæ©ç¸åºçå¶å¾ç±»åãå¦ä¸å¾:
å¯ä»¥ç»å¶åªäºå¾è¡¨UML
UMLç»ä¸å»ºæ¨¡è¯è¨(è±è¯:UnifiedModelingLanguage,缩åUML),æ¯ä¸ç§å¼æ¾çæ¹æ³,ç¨äºè¯´æãå¯è§åãæ建åç¼åä¸ä¸ªæ£å¨å¼åçãé¢å对象çã软件å¯éç³»ç»çå¶åçå¼æ¾æ¹æ³ãUMLå±ç°äºä¸ç³»åæ佳工ç¨å®è·µ,è¿äºæä½³å®è·µå¨å¯¹å¤§è§æ¨¡,å¤æç³»ç»è¿è¡å»ºæ¨¡æ¹é¢,ç¹å«æ¯å¨è½¯ä»¶æ¶æå±æ¬¡å·²ç»è¢«éªè¯ææã
å¨UMLç³»ç»å¼åä¸æä¸ä¸ªä¸»è¦ç模å:
åè½æ¨¡å:ä»ç¨æ·çè§åº¦å±ç¤ºç³»ç»çåè½,å æ¬ç¨ä¾å¾ã
对象模å:éç¨å¯¹è±¡,å±æ§,æä½,å ³èçæ¦å¿µå±ç¤ºç³»ç»çç»æååºç¡,å æ¬ç±»å«å¾ã对象å¾ã
å¨æ模å:å±ç°ç³»ç»çå é¨è¡ä¸ºãå æ¬åºåå¾,æ´»å¨å¾,ç¶æå¾ã
éè¿FreedgoDesginå¯ä»¥ç»å¶åç±»UMLå¾è¡¨,å æ¬
UMLç¨ä¾å¾
UMLç±»å¾
UMLæ¶åºå¾
UMLæ´»å¨å¾
UMLæ³³éå¾
ç¹å»é¡µé¢ä¸é¢+æ´å¤å¾å½¢,éæ©åå¡/(ä¸å¡å»ºæ¨¡)->UML,å¯ä»¥è®¾è®¡åç±»UMLå¾è¡¨,åè§ä¸å¾:
æ°æ®åºER模å
ER模åæ¯å¨æ°æ®åºè®¾è®¡ä¸å¸¸ç¨çæ°æ®å»ºæ¨¡å·¥å ·,é常æ¯ç¨æ¥æè¿°å®ä½çä¿¡æ¯åå®ä½ä¸å®ä½ä¹åçå ³ç³»ã
å¨FreedgoDesignæä¾äºå¯¹ER模åçæ¯æ:
éè¿å¾æ åºéæ©ER模åç»å¶æ°æ®åºER模å
éè¿èåè°æ´å¾å½¢->æå ¥->SQL...å¯¼å ¥sqlDDLèæ¬å建æ°æ®åºER模å
BPMN模å设计
BPMNæ¯ä¸å¡æµç¨å»ºæ¨¡ä¸æ è®°,æ¯ç¨äºæ建ä¸å¡æµç¨å¾çä¸ç§å»ºæ¨¡è¯è¨æ åã
å¯ä»¥éè¿å¾æ åºéæ©BPMNç»å¶BPMN模å
Archimate设计
Archimateæ¯ä¸ç§æ´åå¤ç§æ¶æçä¸ç§å¯è§åä¸å¡åæ模åè¯è¨,å±äºæ¶ææè¿°è¯è¨(ADL),å®ä»ä¸å¡ãåºç¨åææ¯ä¸ä¸ªå±æ¬¡(Layer),ç©ä»¶ãè¡ä¸ºå主ä½ä¸ä¸ªæ¹é¢(Aspect)å产åãç»ç»ãæµç¨ãèµè®¯ãèµæãåºç¨ãææ¯é¢å(Domain)æ¥è¿è¡æè¿°ã
å¯ä»¥éè¿å¾æ åºéæ©BPMNç»å¶BPMN模å
EPC设计
EPCæ¯ç¨äºè¯´æä¸å¡æµç¨å·¥ä½æµ,æ¯è¿è¡ä¸å¡å·¥ç¨è®¾è®¡çSAPR/3建模æ¦å¿µçéè¦ç»ä»¶ã
å¯ä»¥éè¿å¾æ åºéæ©EPCç»å¶EPC模å
ç±»å¾ç¨ä»ä¹å·¥å ·ç»ï¼ç±»å¾ç¨StarUMLå·¥å ·ç»ã
StarUMLæ¯ä¸ç§å建UMLç±»å¾,çæç±»å¾åå ¶ä»ç±»åçç»ä¸å»ºæ¨¡è¯è¨(UML)å¾è¡¨çå·¥å ·ãStarUMLæ¯ä¸ä¸ªå¼æºé¡¹ç®ä¹ä¸åå±å¿«ãçµæ´»ãå¯æ©å±æ§å¼º(zj)ãæ¯æç§GoF模å¼(Pattern),以å3ç§EJB模å¼ãStarUMLä¹ç»åäºæ¨¡å¼åèªå¨çæ代ç çåè½,æ¹ä¾¿è½å®è®¾è®¡ã
GoF模å¼åºèªäºErichGammaç4人åèçDesignPatterns:ElementsofReusableObject-OrientedSoftwareä¸ä¹¦,å ¶å ååºäºç§è½¯ä»¶æ¨¡å¼,å¯è§£å³è½¯ä»¶è®¾è®¡ä¸çç¹å®é®é¢ãStarUMLä¹æ¯æ3ç§å¸¸ç¨çEJB模å¼,åå«ä¸ºEntityEJBãMessageDrivenEJBãSessionEJBã
ç¸å ³ä¿¡æ¯
1ãå¯ç»å¶9款UMLå¾:ç¨ä¾å¾ãç±»å¾ãåºåå¾ãç¶æå¾ãæ´»å¨å¾ãéä¿¡å¾ãæ件å¾ãé¨ç½²å¾ä»¥åå¤åç»æå¾çã
2ãå®å ¨å è´¹:StarUMLæ¯ä¸å¥å¼æ¾æºç ç软件,ä¸ä» å è´¹èªç±ä¸è½½,è¿ä»£ç é½å è´¹å¼æ¾ã
3ãå¤ç§æ ¼å¼å½±åæ件:å¯å¯¼åºJPGãJPEGãBMPãEMFåWMFçæ ¼å¼çå½±åæ件ã
4ãè¯æ³æ£éª:StarUMLéµå®UMLçè¯æ³è§å,ä¸æ¯æè¿åè¯æ³çå¨ä½ã
5ãæ£ååå·¥ç¨:StarUMLå¯ä»¥ä¾æ®ç±»å¾çå 容çæJavaãC++ãC#代ç ,ä¹è½å¤è¯»åJavaãC++ãC#代ç ååçæç±»å¾ã