我想知道 _什么是Spring Framework? 为什么和何时应该在Java Enterprise开发中使用它? _ 答案将是“依赖注入框架”。好了,使用依赖注入框架时我们有什么优势?用setter值和/或构造函数参数描述类的想法对我来说似乎很奇怪。为什么这样
因为我们可以更改属性而无需重新编译项目?这就是我们所获得的一切吗?
那么,我们应该用什么对象来描述beans.xml
?所有对象还是只有几个?
欢迎最简单的答案
我们使用依赖注入(DI)来实现 松散耦合 。选择任何特殊的DI容器并不那么重要。
每次使用new
关键字创建一个类的实例时,您都将代码紧密地耦合到该类,并且您将无法用另一个实例代替该特定实现(至少在不重新编译代码的情况下)。
在C#中看起来像这样(但在Java中是等效的):
public class MyClass
{
public string GetMessage(int key)
{
return new MessageService().GetMessage(key)
}
}
这意味着,如果您以后想要使用其他MessageService,则不能。
另一方面,如果您将一个接口注入类并遵守Liskov替换原则,则您将能够独立地改变使用者和服务。
public class MyClass
{
private readonly IMessageService messageService;
public MyClass(IMessageService messageService)
{
if(messageService == null)
{
throw new ArgumentNullException("messageService");
}
this.messageService = messageService;
}
public string GetMessage(int key)
{
return this.messageService.GetMessage(key)
}
}
尽管这看起来更为复杂,但我们现在已经设法遵循“
单一责任原则”,即确保每个协作者仅做一件事情,并且我们可以彼此独立地进行变更。
此外,我们现在可以更改MyClass的行为,而无需更改类本身,因此遵循了Open / Closed
Principle
。
问题内容: 已经发布了几个问题,其中包括有关依赖项注入的特定问题,例如何时使用它以及支持它的框架。然而, 什么是依赖项注入?何时/为什么/不应该使用它? 问题答案: 依赖注入 将依赖传递给其他 对象 或 框架 (依赖注入器)。 依赖注入使测试更加容易。注入可以通过 构造函数 完成。 其构造函数如下: 问题 :如果涉及复杂的任务,例如磁盘访问或网络访问,则 很难 对其进行单元测试。程序员必须进行模拟
问题内容: 人们经常提到“依赖注入”和“控制反转”,这是使用Spring框架开发Web框架的主要优点。 如果可能的话,有人可以用一个简单的例子来解释它吗? 问题答案: 由于依赖注入, Spring有助于创建松耦合的应用程序。 在Spring中,对象定义其关联(依赖关系),而不必担心它们将如何获得这些依赖关系。Spring的责任是提供创建对象所需的依赖关系。 例如:假设我们有一个对象,并且它对对象有
考虑下面的代码: 上面的代码是一个表示一个汉堡包类。 该类假设汉堡包括Bun, Patty 和 Toppings。 该类还负责制作Bun, Patty 和 Toppings。 这是一件坏事。 如果需要素食汉堡怎么办? 一个天真的方法可能是: 好吧,这有点不同,它在某些方面更灵活,但它仍然相当脆弱。 如果Patty构造函数改变以允许新的功能会发生什么? 整个汉堡包类必须更新。 事实上,任何时候任何这
我已经开始涉足ASP. Net Core,并发现依赖注入是ASP. Net Core框架中的一流公民,它是内置的,可以用于注入各种服务和库。 我想知道他们正在使用哪个依赖注入框架。他们的文档介绍了ASP中的依赖项注入。网芯 ASP。NET Core从一开始就被设计为支持和利用依赖注入。ASP。NET核心应用程序可以通过将内置框架服务注入Startup类中的方法来利用这些服务,应用程序服务也可以配置
问题内容: 对于Java,依赖注入作为纯OOP工作,即,您提供要实现的接口,并且在框架代码中接受实现已定义接口的类的实例。 现在,对于Python,您可以以相同的方式进行操作,但是对于Python,我认为该方法的开销太大。那么,您将如何以Pythonic的方式实现它呢? 用例 说这是框架代码: 基本方法 最幼稚(也许是最好的?)方法是要求将外部函数提供给构造函数,然后从该方法中调用它。 框架代码:
您可以自由地使用任何标准的Spring Framework技术来定义bean及其注入的依赖项。 为简单起见,我们经常发现使用@ComponentScan(找到你的bean)并使用@Autowired(做构造函数注入)效果很好。 如果按照上面的建议构建代码(在根包中定位应用程序类),则可以添加不带任何参数的@ComponentScan。 所有应用程序组件(@Component,@Service,@R