当前位置: 首页 > 面试题库 >

Spring Framework到底是做什么用的?

邢炯
2023-03-14
问题内容

我听说过很多有关Spring的信息,人们在网络上都说Spring是Web开发的良好框架。Spring Framework到底是做什么用的?


问题答案:

基本上,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初始化和班达注射在适当的地方(Servlet的Web框架,业务类,DAO的,等,等,等…)。

回到Spring中的示例,我们只需要为该userLister字段设置一个setter,并拥有一个像这样的XML文件:

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

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

或更简单地使用以下注释在我们的视图类中归档@Inject:

@Inject
private UserLister userLister;

当视图被创建这样奇迹般地将有一个UserLister准备工作。

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

太棒了!是不是



 类似资料:
  • 问题内容: 这是我的代码: 这是我从解释器运行输出时的结果: 如果您注意到输出,则创建巨大的列表会消耗621.5 MB,而删除它只会释放152.6 MB。当我检查文档时,我发现以下语句: 因此,我猜想它并没有删除对象本身,而只是取消了绑定。 但是,它在解除绑定方面做了什么工作,从而释放了很大的空间(152.6 MB) 。有人可以痛苦地解释我在这里发生什么吗? 问题答案: Python是一种垃圾收集

  • 我很难理解的概念,因为根据视图,它做不同的事情。根据官方的留档,这是一个 用于根据系统窗口(如状态栏)调整视图布局的布尔内部属性。如果为true,则调整此视图的填充以为系统窗口留出空间。 现在,检查class我可以看到,当设置为时,窗口会插入(状态栏、导航栏…)应用于视图填充,该填充根据上面引用的文档工作。这是守则的相关部分: 有了新的材料设计,有了新的类别,这些类别广泛地使用了这面旗帜,这就是混

  • @basic(optional=false)@column(nullable=false)@basic注释将属性标记为Java对象级别的非可选属性。第二个设置,列映射上的nullable=false,只负责生成NOT NULL数据库约束。Hibernate JPA实现在任何情况下都以相同的方式对待这两个选项,因此您不妨只使用其中一个注释来实现这一目的。 我很困惑。这是什么意思-属性或变量在Java

  • 我很难理解流,以workcount为例,对于像Kafka这样的无限源,“sum”到底是做什么的? 我有点理解有时间窗的情况,因为它有开始和结束时间,对我来说就像一个“批次”,但如果没有时间窗, 什么是开始时间和结束时间

  • 问题内容: 在Tour of Go网站的go 1.5发行之前的版本中,有一段代码看起来像这样。 输出看起来像这样: 令我困扰的是,将其删除后,该程序不再显示“世界”。 为什么呢?如何影响执行力? 问题答案: 注意: 从Go 1.5开始,将GOMAXPROCS设置为硬件内核数:golang.org/doc/go1.5#runtime,低于1.5之前的原始答案。 当您在未指定GOMAXPROCS环境变