Spring IoC教程

Spring IoC例题

 

在spring中,控制反转(IoC)是用依赖注入(DI)设计模式来实现的。让我们用一个例子来帮助理解依赖注入(DI)。首先我们先看一个java的例子,一会儿我们在往里添加spring功能。例子非常简单。QuizMaster接口实现popQuestion()方法。为了保持简单,QuizMaster只生成一个问题。

 

StrutsQuizMaster和SpringQuizMaster类捕获QuizMaster接口并分别生成关于struts和spring的问题。

 

 

QuizMasterService类用来先用户展示问题,包含对Quizmaster的引用。

 

最后,我们创建QuizProgram类来进行问答。

 

在这里我们创建了QuizMasterService类,并调用askQuestion()方法。运行的结果就是在控制台输出"Are you new to Spring?"。

 

下面我们用类图来分析这个例子,绿色箭头表示泛化,蓝色箭头表示关联。

我们可以看到这个架构是高耦合的。在QuizMasterService类里创建QuizMaster的实例,如下:

 

如果我们要创建StrutsQuizMaster的实例需要在QuizMasterService类中做如下修改:

 

现在让我们用依赖注入(DI)设计模式来解决高耦合的问题。Spring框架提供了功能强大的容器来管理组件,这个容器是基于控制反转(IoC)原理并用依赖注入(DI)设计模式来体现的。只需要为组件制定接受资源的方法,容器就会自动的将资源传送给组件。

 

在这个例子中,我们直接在QuizMasterServer类中创建一个QuizMaster bean,我们将使用这个容器为我们工作。允许容器注入需要的依赖。

 

我们可以使用setter或constructor注入的方式注入依赖。下面是我们使用setter方式的例子:

 

QuizMaster将用setQuizMaster()方法进行赋值,在QuizMasterService类中,QuizMaster将永远不会被实例化,但是我们依旧访问它。通常情况下将会抛出NullPointerException异常,但是容器会自动给将它实例化,所以不用担心出错。

 

我们将用下面的图形来说明变化:

 

和上面的图像相比,这里多了个Container,它就是用来帮助依赖注入的容器。

 

在bean.xml文件中设置bean,如下:

 

我们使用bean标签来设置每个bean。tag标签的id属性给bean指定一个逻辑名,class属性指定应用的相应bean类。property标签用来指定bean的属性。如果用setter方式实现注入,你需要使用ref标签。

 

这里我们设定的是引入SpringQuizMaster注入到QuizMaster bean中。当我们运行程序,"Are you new to Spring?"将在控制台上显示。

 

如果要QuizMaster所问题的问题关联到Struts,我们只需要更改ref标签中的值。

 

这种方式在组件之间用依赖注入(DI)的方式来减少耦合。

 

下面是运行这个例子所需要的jar文件。

 

源代码:下载

 

源代码 + lib: 下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值