牛刀小试---浅谈Spring如何整合WEB应用程序,Ibatis(2)!

  从上面的文章我们知道,Spring的核心之一就是利用一个工厂类通过XML文件创建一个个的Java对象,但是这些直接可以通过class属性而得到的对象必须符合JavaBean对象的原则,即必须有一个无参的构造函数,要有相应的setter和getter方法。我们又知道我们使用Ibatis的核心就是调用Ibatis的SqlMapClient类来实现对数据库的操作。既然有了这样的认识,那么我们
就可以思考一下,既然Spring可以把整合Ibatis ,那也就是说它可以通过XML文件来创建出SqlMapClient对象,并装配给我们的DAO对象。查看Ibatis提供的API中我们发现SqlMapClient对象并不符合JavaBean的原则,那么我们怎么通过Spring来创建这个对象呢?


在Spring的API中我们可以很轻易找到一个org.springframework.orm.ibatis包,在这个包里Spring提供了SqlMapClientFactoryBean和SqlMapClientTemplate这两个类,通过这两个类Spring便可以创建出我们想要的SqlMapClient对象(Spring还提供了SqlMapFactoryBean,SqlMapTemplate这两个类,这是为了支持Ibatis的老版本而提供的类,在Ibatis2.0的情况下我们暂不需要考虑它们)SqlMapClientFactoryBean是一个工厂类,可以通过对它的属性配置,我们可以得到SqlMapClient对象(关于FactoryBean是如何创建相应的Bean对象的,可以参看Spring的源代码,或者和张孝翔老师联系)。由于我们的Spring自己可以创建出一个数据源对象,所以在我们的sql-map-config.xml中就可以不用在配置数据源了,我们只需要把Spring构建出来的数据源对象作为FactoryBean的一个属性装配给FactoryBean即可。我们知道SqlMapClient对象最终是要通过一个sql-map-config.xml文件来得到相关信息的,那么我们怎么把这个文件传给Spring中构建的SqlMapClient呢?查看SqlMapClientFactoryBean
的API我们知道它有一个setConfigLocation方法,它接受一个Resource对象参数,通过这个方法我们就可以得到我们的sql-map-client对象了。难道还要创建一个Resource对象吗?在Spring中提供了这样一个机制,当我们的方法接受一个Resource对象类型的,而我们传进来的即使是一个String那么
Spring也会竭尽所能的把这个String转化成Resource对象。这样我们就可以直接在applicationContext.xml文件中直接使用value属性来配置configLocation这个属性即可。通过以上的说明我们就可以把Spring和Ibatis完美的整合到一起了。但是在工作中我们更多是应用SqlMapClientTemplate,
这个对象包装了SqlMapClient对象,并加入事务机制,关于这个问题我会在以后的文章中详细的介绍,总之通过以上的方法我们完全可以实现Spring和Ibatis,以及WEB的整合了!!

你可能感兴趣的:(牛刀小试---浅谈Spring如何整合WEB应用程序,Ibatis(2)!)