本篇主要介绍使用Spring来进行依赖注入
以及对以前代码的改进
如果你机器上没有安装Spring需要先到官方网站(http://wwwspringframeworkorg)上去下载将Spring的lib放到war\WEBINF\lib下让应用能够找到它们
将现有应用程序转移到一个设计良好的POJO的基于Spring的应用其实很简单只需要以下几个步骤
利用依赖注入的思想对现有代码进行重构model对象看作beanservice看作aspect一般我们只有bean而没有使用到service
去掉代码中实例化对象和设置依赖(即通过set方法设置)的那部分代码
创建一个配置文件来描述bean和aspect
通过Spring来访问我们的代码
下面我们就按照上面的步骤来改进我们的程序
先看看管理我们bean和aspect的配置文件目前这里没有用到aspect
Example RentABikecontextxml
Bruces Bikes
这里的后面的class是具体类实际情况可能需要完整的包名+类名的形式这里使用的默认包而bean前面的id用来唯一标示这个bean
下面的Bruces Bikes是给这个bean设置属性这里就是所谓依赖注入的思想属性名和值可以被动态的set到相应的bean中去下面这个commandLineView也一样只不过表示它有个属性是rentaBike bean的一个引用大家如果不明白后面会讲到具体的实现
接着来看看这个改进后的装配器
Example RentABikeAssemblerjava
import orgspringframeworkcontextsupportClassPathXmlApplicationContext;
public class RentABikeAssembler
{
public static final void main(String[] args)
{
//使用这一句来读取上面定义的配置文件
ClassPathXmlApplicationContext ctx = new
ClassPathXmlApplicationContext(RentABikeAppcontextxml);
//完成依赖注入
CommandLineView clv =(CommandLineView)ctxgetBean(commandLineView);
clvprintAllBikes( );
}
}
它使用ClassPathXmlApplicationContext(RentABikeAppcontextxml)来读取配置文件Spring其实有很多方法来读取配置文件后面会陆续介绍的
ctxgetBean(commandLineView);这一句先到配置文件中去找id为commandLineView的bean这个时候找到了其具体类是CommandLineView并将属性和值注入到这个对象中
我们回顾一下改动前的代码
public class RentABikeAssembler
{
public static final void main(String[] args)
{
CommandLineView clv = new CommandLineView( );//
RentABike rentaBike = new ArrayListRentABike(Bruces Bikes);//
clvsetRentaBike(rentaBike);//
clvprintAllBikes( );
}
}
大家可以发现上面我注释的句是被替换掉了这些操作是由Spring框架来完成了依赖注入
依赖注入的好处就是可以通过修改配置文件来给类动态加载相关的属性和引用而不用修改代码