作者接下来定义了另外一种ImovieFinder接口的实现
<object name="AnotherMovieFinder"
type="Spring.Examples.MovieFinder.ColonDelimitedMovieFinder, Spring.Examples.MovieFinder">
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"/>
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的好处啊!!???