自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework
Posted niulity
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework相关的知识,希望对你有一定的参考价值。
自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework
——MyFramework
原创: 牛超 TOKYO
Email/MSN:ncfire_msn@hotmail.com
QQ: 10867910
关键字(Keywords):面向对象(OOP)、框架(Framework)、反射(Reflection)、设计模式(Design Pattern)、扩展标识语言(XML)、依赖注入(Dependency Injection)、控制反转容器(IoC)、横切点(Pointcut)、面向方面编程(AOP)
前言
关于IoC与AOP的理论,现在到处都能找到相关的资料,一句话,勿在浮砂筑高台。。。尽管高台上看海滩极有情趣。本次设计的目标是模仿Spring的机能以及其对象XML定义格式来自行打造轻量级的Framework,不是拿来主义而算得上是Spring的模仿秀。本框架设计的初衷只是为了避免目前闲暇的工作所毒害,防止被睡意飘浮的空气所传染。由几行读取XML的代码勾起了本人对以往研究Spring超迷人设计理论的神经与模仿设计的欲望。曾希望走在架构前沿,但自从领了日元就再没有研究过模式耦合之如的概念,整天被无章堆砌的代码恶心着。倒是这段时间没有了挠人的需求变更与计划进度,便冲动这么一时,算是兴趣驱动之使然。
话规正席,MyFramework。。。暂且这么叫吧。利用XML与JAVA反射机制完成依赖注入、对象动态构造、通用对象深度克隆机能以实现IoC与AOP两大核心功能。既然有两大核心功能,代码篇幅和注释应该。。。,但因本人使用的是日语环境,日文键盘也用得不顺,Framework与测试代码只有使用蹩脚的E文注释来填充,望各位海涵并多加指正。
MyFramework之前瞻
IoC是整个框架设计的基础。第一次看到这个名词犯晕其实几篇文章看下来觉得挺简单。写这篇文章也是为了抛砖引玉。毕竟不足充斥着行进之路。首先,设计XML文档并形成自己的标签格式,以便脑中形成相对客观的目的性,即让Framework能够无二义性地读取其中定义的对象,针对定义片断解说如下。
一、对于单一的对象定义,Object标签name为an Employee对象,Singleton定义为单件(不是对象本身的属性,EmployeeBean没有是否为单身这么个属性;具体指系统中仅存一份无副本,见设计模式):
<object name = "anemployee" class = "app.beans.EmployeeBean" singleton = "false">
<EmpId>5</EmpId>
<EmpCode>0005</EmpCode>
<EmpName>ttt</EmpName>
<Birthday>2007-11-04</Birthday>
<Resume>no resume</Resume>
</object>
二、聚合对象Object结点元素子标签以elemen t表示,其属性defpackage表示如果当前对象或是聚合元素的类定义没有指定Package,则将其指定为defpackage所定义的内容,属性iscollection表明该对象为聚合对象。
<object name = "employeelist" class = "java.util.ArrayList" defpackage = "app.beans" iscollection = "true">
<element class = "EmployeeBean">
<EmpId>1</EmpId>
<EmpCode>0001</EmpCode>
<EmpName>aaa</EmpName>
<Birthday>2007-12-04</Birthday>
<Resume>0</Resume>
</element>
<element class = "EmployeeBean">
<EmpId>2</EmpId>
<EmpCode>0002</EmpCode>
<EmpName>bbb</EmpName>
<Birthday>2007-12-04</Birthday>
<Resume>0</Resume>
</element>
<element class = "app.beans.EmployeeBean">
<EmpId>3</EmpId>
<EmpCode>0003</EmpCode>
<EmpName>ccc</EmpName>
<Birthday>2007-12-04</Birthday>
<Resume>0</Resume>
</element>
<element class = "app.beans.EmployeeBean">
<EmpId>4</EmpId>
<EmpCode>0004</EmpCode>
<EmpName>ccc</EmpName>
<Birthday>2007-12-04</Birthday>
<Resume>0</Resume>
</element>
</object>
三、依赖注入,参照对象自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework
自行打造实现控制反转容器(IOC)与面向方面编程(AOP)的轻量级Framework