java – Spring Framework是什么?

人们都在网上说,Spring是一个很好的Web开发框架。但究竟是什么呢?如何使用它来进行Web-Java应用程序开发?给个例子?

基本上Spring是一个框架,这是一个模式,允许构建非常去耦系统。我尽量解释的最简单。

问题

例如,假设您需要列出系统的用户,从而声明一个名为UserLister的接口:

public interface UserLister {
    List<User> getUsers();
}

也许一个实现访问数据库,以获得所有的用户:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

在您的视图中,您需要访问一个实例(只是一个例子,请记住):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

注意上面的代码没有初始化变量userLister。我们应该做什么?如果我显式实例化对象像这样:

UserLister userLister = new UserListerDB();

…我将视图与我访问数据库的类的实现耦合。如果我想从数据库实现切换到另一个从一个逗号分隔的文件获取用户列表(记住,这是一个例子)?在这种情况下,我会再次去我的代码,更改最后一行:

UserLister userLister = new UserListerCommaSeparatedFile();

这对于像这样的小程序没有问题,但…在具有数百个视图和类似数量的业务类的程序中会发生什么。维护成为一个噩梦!

Spring(依赖注入)方法

Spring所做的是通过使用XML文件连接类,这样所有的对象都被Spring实例化和初始化,并注入到正确的位置(Servlets,Web框架,业务类,DAO等,等等)。

回到Spring中的示例,我们只需要为userLister字段设置一个setter,并具有如下所示的XML:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

这种方式当视图创建它神奇地将有一个UserLister准备工作。

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

太好了!不是吗?

>如果要使用UserLister接口的另一个实现,该怎么办?只需更改XML
>如果没有准备好UserLister实现怎么办?编写UserLister的时间模拟实现,并简化视图的开发
>如果我不想再使用Spring怎么办?只是不要使用它!您的应用程序未耦合到它。 Inversion of Control声明:“应用程序控制框架,而不是框架控制应用程序”。

对于依赖注入还有一些其他的选择,在我看来,除了它的简单性,优雅和稳定性之外,SpringSource的家伙已经编程了许多POJO,有助于集成Spring与许多其他共同框架,而不是侵入您的应用程序。 Spring还有几个好的子项目,如Spring MVC,Spring WebFlow,Spring Security,Spring boot 等等。

我鼓励你阅读Martin Fowler’s article关于依赖注入和控制反转,因为他做的比我更好。在理解基本知识后,看看Spring Documentation,在我看来是曾经是最好的Spring书。

http://stackoverflow.com/questions/1061717/what-exactly-is-spring-framework-for

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – Spring Framework是什么?