CloudStack源码分析
- 格式:docx
- 大小:250.13 KB
- 文档页数:43
安装部署CloudStack 4.0企业私有云平台Ubuntu安装方式参考资料CloudStack Installation_Guide/installation.htmlCloudStack Admin_guide/working-with-iso.htmlCloudStack Admin_guide/creating-vms.htmlCloudStack Admin_guide/create-templates-overview.html目录结构1. 什么是CloudStack2. 宿主机的系统需求3. 配置安装源4. 安装Management Server5. 安装配置KVM虚拟化Host主机6. 用户界面7. 配置Management Server8. 创建Instance类型9. 创建ISO安装源并创建Instance10. 创建并定制Template11. 通过定制的Template创建VM Instance12. 其它优化设置环境介绍OS: Ubuntu Server 12.04.1 64-bitServer:10.6.203.10 cloudstack-server-1- CloudStack Management Server- CloudStack Agent- NFS Server- MySQL Server注:CloudStack支持很好的分布式架构,上面- 代表的所有角色都可以部署在不同的机器上,但在测试环境中因为条件有限我全部都部署到了一台机器上。
1. 什么是CloudStackCloudStack是一个开源的具有高可用性及扩展性的云计算平台。
提到开源的云计算平台,相信大家首先想到的可能是OpenStack,目前国内的几家云计算平台如阿里云、盛大云以及新浪SAE貌似都基于OpenStack做了二次开发。
但使用过CloudStack之后,你会发现其实CloudStack更像是一个商业化过后的产品,有着非常好的用户界面,各个模块默认集成的很好,且安装与部署过程也相对容易一些。
部署私有云CloudStack(上)目录•前言o 1.集群规划o 2.设置yum源o 3.关闭防火墙和selinuxo 4.安装nfso 5.安装和启动mysql-servero 6.安装和启动Cloudstack-Managemento7.浏览器访问前言CloudStack形成的基础设施云和数据中心运营商可以快速,轻松地建立在其现有的基础设施提供云服务的需求,弹性云计算服务。
CloudStack用户可以充分利用云计算提供更高的效率,无限的规模和更快地部署新服务和系统的最终用户。
CloudStack 是一个开源的云操作系统,它可以帮助用户利用自己的硬件提供类似于Amazon EC2那样的公共云服务。
CloudStack可以通过组织和协调用户的虚拟化资源,构建一个和谐的环境。
CloudStack具有许多强大的功能,可以让用户构建一个安全的多租户云计算环境。
CloudStack 兼容Amazon API 接口。
CloudStack可以让用户快速和方便地在现有的架构上建立自己的云服务。
CloudStack可以帮助用户更好地协调服务器、存储、网络资源,从而构建一个IaaS平台。
1.集群规划IP 角色192.168.0.232 Xenserver虚拟机、CloudStack服务端、主存储、二级存储192.168.0.231 物理主机、Xenserver服务端2.设置yum源wget -O /etc/yum.repos.d/CentOS-Base.repo /repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo /repo/epel-7.repoyum clean allyum makecache3.关闭防火墙和selinuxsystemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config4.安装nfsyum -y install nfs-utilsmkdir /data/export/{primary,secondary} -pecho -e "/data/export/primary 192.168.0.0/24(rw,async,no_root_squash,no_subtree_check)\n/d ata/export/secondary192.168.0.0/24(rw,async,no_root_squash,no_subtree_check)" >> /etc/exportscat >>/etc/sysconfig/nfs <<EOFLOCKD_TCPPORT=32803LOCKD_UDPPORT=32769MOUNTD_PORT=892RQUOTAD_PORT=875STATD_PORT=662STATD_OUTGOING_PORT=2020EOFsystemctl start nfssystemctl start rpcbindsystemctl enable rpcbindsystemctl enable nfs5.安装和启动mysql-serveryum -y install mariadb-servervi /etc/f #在[mysqld]下添加下列参数:innodb_rollback_on_timeout=1innodb_lock_wait_timeout=600max_connections=350log-bin=mysql-binbinlog-format= 'ROW'systemctl start mariadb.servicesystemctl enable mariadb.service6.安装和启动Cloudstack-Managementrpm --import /RPM-GPG-KEY-mysql #从MySQL导入GPG公钥yum -y install mysql-connector-python #安装mysql-connectorcd /root/cloudstack4.11.1/ && yum -y localinstall cloudstack-* #/centos/7/4.11/cloudstack-setup-databases cloud:123456@localhost --deploy-as=root #初始化CloudStack数据库mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; #授权用户权限/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m/data/export/secondary/ -f /root/cloudstack4.11.1/systemvmtemplate-4.11.1-xen.vhd.bz2 -h xenserver -F #导入基础模版systemvmtemplate-4.11.1-xen.vhd.bz2下载地址:/en/4.11.1.0/adminguide/systemvm.html cloudstack-setup-managementsystemctl enable cloudstack-management7.浏览器访问用户名/密码为:admin/passwordhttp://192.168.0.232:8080/client/。
分类号TP315 密级公开UDC 编号硕士研究生学位论文题目 CloudStack云平台构建与应用研究学院(所、中心)信息学院专业名称电子与通信工程研究生姓名学号导师姓名职称2014年5月独创性声明本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。
除了文中特别加以标注和致谢的地方外,论文中不包含其他人或集体已经发表或撰写过的研究成果,对本文的研究做出贡献的集体和个人均已在论文中作了明确的说明并表示了谢意。
研究生签名:日期:论文使用和授权说明本人完全了解云南大学有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交学位论文和论文电子版;允许论文被查阅或借阅;学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。
(保密的论文在解密后应遵循此规定)研究生签名:导师签名:日期:…………………………………………………………………本人及导师同意将学位论文提交至清华大学“中国学术期刊(光盘版)电子杂志社”进行电子和网络出版,并编入CNKI系列数据库,传播本学位论文的全部或部分内容,同意按《中国优秀博硕士学位论文全文数据库出版章程》规定享受相关权益。
研究生签名:导师签名:日期:摘要摘要网络技术的发展,大规模海量数据管理与存储需求,分布式技术的产生,特别是虚拟化技术的兴起,使云计算技术应运而生。
云计算作为一种多种技术的集合,把计算资源变成了一种可以流通的资源,实现了资源的按需分配,提高对软硬件资源的利用效率,避免了资源的浪费。
云计算的出现改变了现存的互联网生态环境,通过云计算中心提供的服务,普通用户也可以具备执行超级计算的能力,极大的提高了人们的工作和生产效率。
CloudStack作为一个开源的云计算平台,具有极高的可用性及扩展性,支持众多主流的Hypervisors,如KVM,XenServer,VMware,Oracle VM等等。
使用CloudStack可以高效便捷的部署、配置、管理IaaS公有云和私有云,快速方便的在现存基础架构上面搭建公用的或属于自己的云服务。
VMware是世界上顶尖的提供虚拟化和云计算解决方案的商业公司,在全球拥有400,000多家客户和55,000多家合作伙伴。
若干个产品套系,几十种软件可以提供从单机虚拟化到云端的完整解决方案。
它的产品功能太过强悍,如果你们公司已经买了它,那么基本上也就没有CloudStack什么事了。
但同时,它也非常昂贵!一整套VMware产品要几十万到200万,还不包括其它相关的服务费。
现在市场上, 即使是北京、香港等高收入的城市,很多企业也买不起VMware的产品,他们很多时候只能用VMware阉割过的免费版,或河蟹过的版本。
CloudStack云平台支持多种虚拟化解决方案,甚至支持多种异构虚拟化系统的整合。
你可以在CloudStack创建的同一个集群中实现,A机架中的主机使用KVM方案,B机架中的主机采用vCenter管理。
如此将可以实现很好的过渡,让您有充足的时间从昂贵的VMware迁移到免费的虚拟化解决方案中来。
今天我们将主要介绍CloudStack与VMware的vCenter整合。
鉴于网上文章一大抄,很多内容存在误导,出了错都不知道问题在哪。
这回呢,我会把每一步说明尽可能详细一些,加上我多次重装后得到的经验和教训,希望能让后来者可以少走些弯路。
一、VMware环境的准备VMware环境的搭建比较简单,网上相关介绍的文章也很多,这里我就不重复说明了。
如果你想使用VMware vSphere的虚拟机管理程序运行来宾虚拟机,安装vSphere在云主机上的。
要求:已经安装好 vSphere 和 vCenter,要求版本在 4.1以上。
必须使用vCenter标准的443端口,已便CloudStack与之通讯。
CloudStack目前只支持ESXi,ESX的不行。
vCenter需要创建单独的集群供CloudStack使用,集群中已经添加ESXi主机,但不能有任何已经创建的虚拟机。
二、与CloudStack系统整合登陆CloudStack控制台,选择“基础架构”,开始添加你的“区域”。
CloudStack安装报告CloudStack 安装测试报告CloudStack介绍CloudStack是新加⼊到Apache基⾦会中的开源云计算平台。
CloudStack开发语⾔为Jav a,此前为/doc/bd78c861f78a6529647d53eb.html 研发应⽤的商业软件,此后被Citrix思杰收购,2012年4⽉5⽇思杰宣布将CloudStack项⽬提交⾄Apache基⾦会,CloudStack成为Apache许可下的完全开源软件。
CloudStack平台可以加速⾼伸缩性的公共和私有云(IaaS)的部署、管理、配置。
其最新版本的CloudStack 3颇具Amazon亚马逊风格,它帮助那些希望效仿全球最成功云平台来构建云设施的企业⽤户,快速⽽轻松地将虚拟数据中⼼资源转⼊⾃动化、富于弹性且可⾃我服务的云平台中。
另外,CloudStack兼容亚马逊API接⼝,允许跨CloudStack和亚马逊平台实现负载兼容。
使⽤CloudStack作为基础,数据中⼼操作者可以快速⽅便的通过现存基础架构创建云服务。
CloudStack 与OpenStack的⽐较2012年4⽉5⽇Citrix宣布将CloudStack开源软件加⼊到Apache软件基⾦会,CloudStack与CloudStack同成为Apache许可下的完全开源云计算平台,同时也成为OpenStack最有⼒的竞争对⼿。
虽然截⾄⽬前OpenStack在市场宣传和影响⼒⽅⾯胜过CloudStack,⽀持伙伴及社区开发⼈数也远甚于CloudStack,但CloudStack的平台成熟度远优于OpenStack,CloudStack的⽤户体验及安装容易度也都⽐OpenStack要好,并且CloudStack已在更具⽣产实际的商业应⽤环境中得到了充分验证,CloudStack的商业⽤户包括社交游戏商Zynga、全球最⼤域名注册商/doc/bd78c861f78a6529647d53eb.html 、印度最⼤软件外包商 Tata,GreenQloud,KT,Nokia等;⽽OpenStack则更像是仍处于研发阶段难以称为“成熟的产品化的IT产品”。
通达信云顶天宫源码【原创实用版】目录1.通达信云顶天宫源码概述2.通达信云顶天宫源码的功能特点3.通达信云顶天宫源码的应用领域4.通达信云顶天宫源码的未来发展前景正文一、通达信云顶天宫源码概述通达信云顶天宫源码是一款基于云计算技术的软件,旨在为用户提供便捷、高效的数据处理和分析功能。
这款软件凭借其强大的性能和实用的功能,已经受到了广泛的关注和使用。
二、通达信云顶天宫源码的功能特点通达信云顶天宫源码具有以下几个主要功能特点:1.高度集成:这款软件集成了多种数据处理和分析功能,用户无需安装其他软件,即可满足日常的数据处理需求。
2.强大的数据处理能力:通达信云顶天宫源码可以处理各种类型的数据,包括文本、图像、音频等,满足用户多样化的数据处理需求。
3.高效的运算速度:这款软件基于云计算技术,具有强大的运算能力,能够快速完成各种复杂的数据处理和分析任务。
4.用户友好的界面:通达信云顶天宫源码的界面设计简洁明了,用户无需特殊的技术背景,即可轻松上手操作。
三、通达信云顶天宫源码的应用领域通达信云顶天宫源码广泛应用于以下几个领域:1.科学研究:在科研领域,这款软件可以协助研究人员快速处理和分析大量的实验数据,提高科研工作的效率。
2.企业管理:在企业管理领域,通达信云顶天宫源码可以帮助企业快速处理和分析各种业务数据,为企业决策提供有力的支持。
3.金融分析:在金融领域,这款软件可以用于股票、基金等金融产品的数据分析,帮助投资者做出更明智的投资决策。
4.教育教学:在教育领域,通达信云顶天宫源码可以用于教学数据的处理和分析,提高教学质量。
四、通达信云顶天宫源码的未来发展前景随着云计算技术的不断发展,通达信云顶天宫源码在未来的发展前景广阔。
CloudStack拥有强大的硬件管理能力,可以把企业的内部硬件资源统一管理起来,虚拟化为一个硬件资源池,实现按需分配。
CloudStack对硬件资源的管理功能全部放在“基础架构”菜单下。
登录后,选择左侧导航上的“基础架构”-->区域-->添加区域。
区域是CloudStack中最大的范围,可以理解为一个机房或数据中心。
你完全能够把天津/上海/广州等地区的机房都纳入同一个CloudStack中管理。
点击“添加区域”后会显示一个向导。
不得不赞一下,CloudStack这方面非常人性化,将复杂的操作简化为向导,一步步引导你操作,有效降低了使用难度。
不过,在接下来的操作中你要小心谨慎,因为每个选项都可能为你将来的使用埋雷!而CloudStack错误提示做的很差,许多问题根本没有准确的提示,甚至日志里也找不到任何有用的信息。
也许你会在为一个问题郁闷好久后突然豁然开朗,发现也许这个问题与当初建立基础架构时某个选项有关。
一、Add Zone根据虚拟化后网络类型的不同,“区域”分为“基本资源域”和“高级资源域”。
1、使用基本资源域,将对虚拟机采用扁平化管理,所有生成的虚拟机与主机都使用相同的CIDR段。
简单的说:你使用的网络是外网的话,则每台虚拟机都会产生一个公网IP,因此在前期规划IP地址时需要预留足够的IP地址。
由于虚拟机都在一个网段中,为保证安全,虚拟机间采用“安全组”方式进行网络隔离,用户可以通过“安全组”来设置虚拟机之间的连通性。
2、使用高级资源域,你可以将“公共网络”、“来宾网络”、“管理网络”、“存储网络”分别划分不同的网段,并能将不同的网络使用不同的网卡以提高性能。
在高级资源域中,虚拟机间的网络采用VLAN方式隔离,并且提供了“防火墙”、“负载均衡”、“端口转发”、“冗余路由器”等强大的网络管理功能。
注:高级资源域功能虽然强大,但未必就好,具体还是得看你的需求,按需选择。
今天我们就主要来讲“基本资源域”。
cloudstack部署参考⽂档cloudstack的rpm包下载地址环境部署规划,虚拟化:esxi 6.7操作系统版本:centos 6.9cloudstack版本:4.9.3.0python版本:2.6主机名IP地址配置⽤途node1172.16.103.216vcpu,32Gb内存,16G精简配置硬盘cloudstack控制节点,安装数据库,和控制节点的web控制台,同时也作为计算节点存在node2172.16.103.34vcpu,4G内存,16G精简配置,300G精简配置硬盘,100G精简配置模拟存储节点,安装nfs包,对外提供nfs的存储服务,16G⽤于安装操作系统,300G⽤于主存储,100G ⽤户⼆级存储node3172.16.103.416vcpu,32Gb内存,16G精简配置硬盘纯的计算节点,为cloudstack提供计算资源1,配置ntp服务器和数据库服务器关闭selinux和防⽕墙,重启vi /etc/selinux/configchkconfig iptables off修改hostsvi /etc/hosts172.16.103.2 node1172.16.103.3 node2172.16.103.4 node3安装ntp服务yum install ntp -yservice ntpd startchkconfig ntpd on安装mysqlyum -y install mysql mysql-serverservice mysqld startchkconfig --add mysqldchkconfig mysqld on修改mysql中root⽤户的密码为rootmysqlmysql> use mysql;mysql> set password for root@localhost = password('root');2,安装管理端和服务端的rpm包cloudstack主要的包cloudstack-agent-4.9.3.0-1.el6.x86_64.rpm #agent包。
目录CLOUDSTACK源码分析 (3)1. 用CLOUDSTACK的源码进行工作 (3)1.1. 源码获得方式 (3)2. 包与依赖 (3)2.1. 包 (3)2.2. 依赖 (4)2.3. 未来 (5)3. 异常与日志 (5)3.1. 日志 (5)3.2. 异常和异常捕获 (6)3.3. C LOUD S TACK异常 (8)4. 代码联合工作 (9)4.1. 组件 (9)4.2. 组件加载 (10)5. CLOUDSTACK API开发 (11)5.1. 如何编写API (11)5.2. API注解 (16)5.2.1. API命令注解 (16)5.2.2. API响应注解 (17)6. CLOUDSTACK中使用SPRING (17)6.1. C LOUD S TACK组件 (18)6.2. 如何声明一个C LOUD S TACK组件 (19)6.3. A UTO-WIRING (19)6.4. C LOUD S TACK S PRING组件的编码约定 (20)6.4.1. 注意自动注入的时间 (20)6.4.2. 公用构造器 (20)6.4.3. 组件自主初始化 (20)6.4.4. 运行时注入 (21)6.4.5. CloudStack定制化AOP(面向切面的编程) (21)6.4.6. 可插拔适配器 (24)6.4.7. 模块和组件 (26)6.4.8. 什么时候用或者不用@Inject (28)6.5. 组件生命周期 (28)7. 数据访问层 (29)7.1. 需要知道的 (29)7.2. 在哪能找到例子 (29)7.3. DAO (30)7.4. 写一个新的VO和DAO (31)7.5. 使用 (34)7.5.1. 使用DAO (34)7.5.2. 更新VOs (34)7.5.3. 搜索 (34)7.5.4. 使用事务 (36)7.5.5. 处理嵌套事务 (38)7.5.6. 处理锁 (38)8. 使用JUNIT和SPRING进行单元测试 (38)CloudStack源码分析1.用CloudStack的源码进行工作1.1.源码获得方式使用git将源码克隆到本地:git clone https:///repos/asf/cloudstack.git切换版本:git checkout <分支>2.包与依赖2.1.包下面的表格列出了所有的包与其作用,如果你想为CloudStack添加代码,请阅读这个列表再决定将代码添加到哪个包里面2.2.依赖包的依赖关系反应了CloudStack设计的重要性,因此不应该改变包的关系。
ovm、vmware-base、agent-simulator和core是所有ServerResource基于cloud-api的实现,按照这种设计,这些包都不会访问数据库。
cloud-agent是基于cloud-api的序列化和反序列化实现,但是理想情况下,cloud-agent仅仅作为容器并且应当基于cloud-util。
2.3.未来CloudStack在未来会向上面这种结构进行转变,并且将API划分为以下三种:3.异常与日志CloudStack没有一个非常强大的异常与日志,不是我们只说不做,是因为我们并不擅长,不过我们一直努力在做好这些事情。
3.1.日志CloudStack使用log4j进行日志记录,可以使用一些日志方案。
虽然log4j很老,但是确实很好,并且真正重要的不是工具而是内容。
CloudStack应当部署在INFO或者以上级别,并使用GMT标准时间。
修改日志级别并不需要重启CloudStack,下面是推荐日志级别以供参考:3.2.异常和异常捕获下面是一些异常处理的示例:1、如果正在编写切入点代码,需要由你捕获所有异常(检查异常和非检查异常),并且妥善记录所有错误,你可以这样做:2、如果你不是编写切入点代码,可以这样做:3、永远不要声明一个方法直接抛出异常4、永远不要抛出异常本身,如果需要抛出检查异常,你需要找到一个合适的去使用,如果是非检查异常,例如空指针,你可以抛出CloudRuntimeException5、不要把原来的异常再次抛出6、如果你有一个后台任务列表,处理每个任务的异常都非常重要,如果有任何一个异常没有处理,可能会导致灾难性后果:3.3.CloudStack异常4.代码联合工作目前,你可能看到了很多不同的代码,是不是感觉非常混乱?怎么下手?怎么让他们工作起来?下面就来告诉你。
4.1.组件CloudStack部署了下面一些组件,它们都是单例并且数据处理都经过它们,不过每个组件有不同的作用。
4.2.组件加载组件的加载声明在components.xml中,下面是示例:5.CloudStack API开发5.1.如何编写API1、在plugins文件夹中创建文件夹,例如:cloudstack/plugins/api/timeofday2、在文件夹中创建pom.xml,确保parent定位到plugins/pom.xml,否则将无法编译。
3、为新插件添加以下片段到cloudstack/plugins/pom.xml,mvn编译时会知道这个插件需要编译4、创建src、target、test目录5、创建代码包结构,plugins/api/timeofday/src/com/cloud/test6、创建接口,继承PluggableService7、创建接口实现类,重写getCommands方法8、编写一个类来实现注解方式的命令9、为命令编写响应类10、修改client/tomcatconf/componentContext.xml.in,添加新命令11、修改client/tomcatconf/commands.properties.in,添加命令名称1=ADMIN2=RESOURCE_DOMAIN_ADMIN4=DOMAIN_ADMIN8=USER12、将插件作为依赖添加到client/pom.xml中,你可以看到里面的示例13、测试新的命令,打开浏览器访问5.2.API注解5.2.1.A PI命令注解@APICommand——命令name ——名称(字符串并且全局唯一)description ——描述(字符串,默认空)usage ——使用方法(字符串,默认空)includeInApiDoc ——声明是否包含在API文档中(boolean,默认true)since ——命令在哪个版本加入的(字符串,默认空)responseObject ——命令的响应类(class<? Extends BaseResponse)@Parameter——参数name ——参数名称(字符串,默认空)description ——描述(字符串,默认空)required ——必填(boolean,默认false)type ——参数类型(CommandType枚举)entityType ——映射数据库实体类型collectionType ——如果参数类型为list,需要指定集合泛型(CommandType枚举)expose ——如果设置false,将忽略传递的参数(boolean,默认true)includeInApiDoc ——声明是否包含在API文档中(boolean,默认true)length ——参数的最大长度(整形,默认255)since ——命令在哪个版本加入的(字符串,默认空)枚举类型5.2.2.A PI响应注解@EntityReference——实例引用@SerializedName ——响应序列化名称@Param ——响应参数description ——描述(字符串,默认空)includeInApiDoc ——声明是否包含在API文档中(boolean,默认true)since ——命令在哪个版本加入的(字符串,默认空)responseObject——示例查看UserVmResponse的nics6.CloudStack中使用SpringApache重构了CloudStack的架构,奠定了一个更高的面向组件的根基,使用了在Java 社区中大部分开发人员都熟悉的工具,Apache将现有的很多CloudStack代码切换到Spring框架上,虽然不会导致业务逻辑的变化,但是开发人员仍需知道CloudStack的改变。
6.1.CloudStack组件CloudStack管理服务器包含了不同的组件,通常为通用框架组件、管理者组件、适配器组件和DAO组件。
在部署期间,CloudStack允许经验丰富的用户通过编辑配置文件,组成一个自定义的设置。
CloudStack开放源代码的默认配置分布在applicationContext.xml.in和componentContext.xml.in中,对于non-OSS分布在applicationContext.xml.in和nonossComponentContext.xml.in中。
组件如果在OSS和non-OSS中使用,它应当声明在applicationContext.xml.in中。
可选组件,特定于OSS或non-OSS的组件,可以声明在componentContext.xml.in或nonossComponentContext.xml.in或者都声明。
如果某个组件在OSS和non-OSS中的设置不同,它应该配置到applicationContext.xml.in 和nonossComponentContext.xml.in。
使用下面的流程来确定你的组件应该配置到哪里:6.2.如何声明一个CloudStack组件Spring组件无非就是一个POJO,一旦确定哪个文件需要在上述代码中使用,声明它其实非常简单,如下:id应当是唯一的,不要使用@Component,它不符合JSR,我们不再支持自动扫描加载组件。
6.3.Auto-wiring切换到Spring的最大好处之一是统一使用了Auto-wiring,遗留代码中很多地方是run-time方式,这样会使系统变得更加复杂。
下面的示例中,开发者尝试将子类中所有用到的组件以静态变量方式写入BaseCmd。
这意味着当你添加一个新的命令类时,你需要记住在BaseCmd中注册你的Service借助Spring,开发人员可以使用@Inject注解来声明这些引用,更重要的是,当只在个别命令类中注入这些应用时,可以使命令类更加独立,这就是使用Spring的两个原因之一,可以让我们的代码更加整洁。
(另一个原因是充足的第三方组件)虽然我们将代码切换到了Spring,但是还有一些遗留代码仍然没有切换,如果你看到了,希望你能修改并提交它们。