作者接下来定义了另外一种ImovieFinder接口的实现

<object name="AnotherMovieFinder"
      type
="Spring.Examples.MovieFinder.ColonDelimitedMovieFinder, Spring.Examples.MovieFinder">

<constructor-arg index="0" value="movies.txt"/> 

  </object>  

ColonDelimitedMovieFinder的没有默认构造函数,需要提供一个参数,constructor-arg标签就是指明参数用的

 

然后替换MyMovieLister 的注入,其实就是得到ImovieFinder接口另外一个实现,直接在config文件中改

<object name="MyMovieLister"
    type
="Spring.Examples.MovieFinder.MovieLister, Spring.Examples.MovieFinder">
      <!-- lets use the colon delimited implementation instead -->
      <property name="movieFinder" ref="AnotherMovieFinder"/>
  </object>
  <object name="MyMovieFinder"
      type
="Spring.Examples.MovieFinder.SimpleMovieFinder, Spring.Examples.MovieFinder"/>
  </object>
  <object name="AnotherMovieFinder"
      type
="Spring.Examples.MovieFinder.ColonDelimitedMovieFinder, Spring.Examples.MovieFinder">
      <constructor-arg index="0" value="movies.txt"/>

</object>  

 

这样就可以得到 ImovieFinder接口的ColonDelimitedMovieFinder实现。

 不用重新编译!这就是Spring IOC的好处?

 的确:如果用代码写的话要这样:

开始用 SimpleMovieFinder实现ImovieFinder接口

SimpleMovieFinder simple = new SimpleMovieFinder ();

 MovieLister movieLister = new movieLister (simple );

 

如果要改用 ColonDelimitedMovieFinder得话要改代码:

 ColonDelimitedMovieFinder colon= new ColonDelimitedMovieFinder ("movie.txt");

 MovieLister movieLister = new movieLister (colon );

 

通过改config文件 ,就不用改代码了!这就是Ioc的好处啊!!???

 
 

posted on 2012-06-09 22:53  DongD  阅读(180)  评论(0编辑  收藏  举报