好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
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最好的书籍了。
上一篇如何使用Java解码Base64编码的数据?
用java获取文件的MD5校验和下一篇
下一篇用java获取文件的MD5校验和

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号