发布日期:2018-03-26
java的Spring框架到底如何正确使用?+ 查看更多
java的Spring框架到底如何正确使用?
+ 查看更多
发布日期:2018-03-10 10:38
分类:JAVA
浏览次数:86
对于Spring我听说过很多,大家都在说对于所有的网页来说Spring是一个很好的用于网页开发的框架。但是它正确地用于什么方面?在我的web-java开发中我该如何使用它?能举个例子吗?
回答
基本上Spring是一个依赖注入模式的框架,这种模式允许创建一个非常分离的系统。我会尽我所能使用最简单的方式向你解释(这是一个不短的回答)
问题
例如,假设你需要列出系统的用户,然后你声明了一个叫做
UserLister的接口:
public interface UserLister { List以及可能一个访问数据库的实现来获取所有用户:getUsers(); }
public class UserListerDB implements UserLister { public List在你的视图中,你会需要访问一个实例(记住这只是一个例子):getUsers() { // DB access code here } }
public class SomeView { private UserLister userLister; public void render() { List注意以上的代码并没有初始化变量users = userLister.getUsers(); view.render(users); } }
UserLister。那我们该做什么?如果我明确地实例化对象,像下面这样:
UserLister userLister = new UserListerDB();……我会把视图和我访问数据库的类的实现相结合。假使我想要从数据库的实现转化到另一个从用逗号隔开的文件中获取用户名单要怎么做(记住,这只是举例)?这种情况下我将再次回到我的代码修改最后一行变为:
UserLister userLister = new UserListerCommaSeparatedFile();
对于像这样的小程序而言没有什么问题。但是……在有数百个视图和类似数量的业务类的程序中,这会让代码维护变成噩梦。
Spring(依赖注入模式)方法
Spring通过使用一个XML文件来连接类,这样所有的对象都能被Spring实例化和初始化,并且能被注入到正确的位置(Servelts,Web框架,业务类,DAO等等)。
回到Spring中的例子,我们只需要为UserLister字段有一个设值函数以及一个如下的XML文件:
<*bean class="UserListerDB" id="userLister"> <*bean class="SomeView"> <*property name="userLister" ref="userLister">这样,当视图创建的时候,它会很神奇地有一个
UserLister来准备工作。
List这很棒!不是吗?users = userLister.getUsers(); // This will actually work // without adding any line of code
△如果你想要使用你的
UserLister接口中的另一个实现该怎么做呢?只要改变XML文件。
△如果你没有准备好
UserLister的实现怎么办?敲一个
UserLister
暂时的模拟实现来缓解视图的开发。
△如果我不再使用Spring呢?那就不用它!你的程序只是不和它耦合了?控制反转表明:是应用程序在控制着这个框架,而不是框架在控制应用程序。
其实对于依赖注入还有其他的选择,我认为Spring变得如此著名不仅因为它的简洁、优雅和稳定,还因为SpringSource的家伙们已经编写了很多很多POJO,它可以帮助整合Spring和其他没有被注入你的程序中的普通的框架。并且Spring也有一些好的子项目,像Spring MVC,Spring WebFlow,Spring Security以及其他一系列的附加项目。
希望这对你有帮助。无论如何,我鼓励你阅读Martin Fowler关于依赖注入和控制反转的文章,因为他解释地可比我好多了。在我看来,这永远是关于Spring最好的书籍了。