首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >春豆生活

春豆生活
EN

Stack Overflow用户
提问于 2011-08-08 23:19:42
回答 4查看 251关注 0票数 0

我正在尝试理解Spring bean背后的编程逻辑。在示例中,通常会为它们指定一个具体的名称,如"Duke“或"Kenny",此外,还会为xml中注入的构造函数和setter函数提供具体的值。我以更一般的方式来考虑bean,比如:

代码语言:javascript
运行
复制
Student basicStudent = new Student(grade, name); // gives me certain amount of flexibility where say for grade and name I can have different values, then I can deploy this new student to database. And every unique web request, lets say, I can recreate various instances of different students with this line. 

但是对于.xml,我该怎么办呢?我使用预定义的值检索静态bean:

代码语言:javascript
运行
复制
Student Bob= (Student)appContext.getBean("Bob"); // where this bean is set with predefined values

希望我的困惑能被理解,我不能想到Spring Beans的应用。我不是产品开发人员,只是一个学生,所以我可能会错过这里的一些重要概念。为什么我需要带有类的唯一实例的预加载bean?

谢谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-09 01:07:18

Spring通常是一个支持企业开发的框架,它几乎总是意味着嵌入了一些业务逻辑的某种web应用程序(GUI或API)。如果您要编写一个简单的Java web应用程序并为其提供一些有意义的结构--这意味着您的代码不会全部打包到一个没有责任划分的大型类中--您很快就会遇到这样的问题:“谁/什么应该负责创建这些类的实例?”以及,“实例如何获取它们所需的其他实例(依赖项)?”这些问题自然导致了对依赖注入/控制反转容器的需求,Spring就是这样的容器。

此外,如果你正在实践测试驱动的开发,任何新的开发人员都没有理由不去实践,你会发现“获取依赖项”这个问题更加紧张,因为与allows its dependencies to be injected对象相比,在内部创建自己的依赖项的对象非常难以测试。

这只是一个答案的最基本的开始,但如果它有帮助,如果还有其他我可以澄清的事情,请告诉我。

Spring:关于创建beans来表示每个的问题,学生:这不是--或者一般的依赖注入容器--打算使用的方式。您不会为应用程序中的每个学生编写XML bean定义。在不同的“种类”对象之间有一条有时模糊的界限。

有些对象具有不同的状态,将它们与相同类型的其他对象区分开来。我们倾向于将这种类型的对象称为“实体”或“域对象”。你的学生和老师都是完美的例子。这些对象的每个实例都代表一个特定的人。

另一种对象是没有区别于同类对象的不同状态的对象。更重要的是,它没有关于任何特定实体实例的状态。这方面的一个例子可能是数据访问对象(DAO),它封装并隐藏了与关系数据库交互的复杂性。它有状态,就像一个连接池,它从连接池中提取数据库连接以执行其工作,但无论您有一个DAO实例还是100个实例,它们都是相同的和可互换的。

我们总是使用Spring来管理后一类对象--相对于与之交互的其他对象而言是无状态的对象。通常,我们只创建其中的一个(scope="singleton",这是Spring的默认设置),并让Spring将它们连接在一起,以便填充所有依赖项。

对于另一类实体,有些人使用Spring向它们注入依赖项,有些人不这样做,但是没有人在XML文件中显式地将每个实体对象创建为Spring bean。实体总是使用new操作符创建的,无论是由您创建的,还是由为您处理它们的其他框架创建的。不过,还有其他让Spring管理对象的方法。例如,using AspectJ,您可以这样编织字节码:当您调用构造函数时(就像使用new Student()一样),不仅会创建实例,还会对其执行依赖项注入。这更像是你在实体中使用的DI风格。

票数 1
EN

Stack Overflow用户

发布于 2011-08-09 00:49:56

我认为您的困惑在于Java beans和Spring beans之间的区别。Spring beans是Java beans,但Spring通常管理的beans的级别更高。

Student类是一个Java bean,可以在应用程序中用作“数据对象”(DAO)。它们将在运行时通过用户输入、数据库访问、从文件读取等创建。用于创建这些Student对象的类是Spring bean的更好候选者-这将是通常设计模式命名方案中的“StudentFactory”。

由StudentFactory管理Spring意味着生成学生的方法是可配置的。对于生产环境,您可以使用一个从数据库读取数据的DBStudentFactory。对于测试,您可以有一个TestStudent工厂,它只加载一个地图。

票数 2
EN

Stack Overflow用户

发布于 2011-08-09 00:46:38

使用bean有很多优点。

http://en.wikipedia.org/wiki/Inversion_of_Control

  • An

  • 你有一个IOC容器:http://en.wikipedia.org/wiki/Inversion_of_Control

  • An IoC容器节省了大量的时间,省去了一些简单的任务,比如为数据库访问设置数据源。数据源可以被注入automatically

  • Testing更容易,因为您可以很容易地解除对象的耦合。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6984396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档