什么是依赖注入和Spring框架?

EugeneP:

可能的重复项:
什么是依赖项注入?
Spring到底是干什么的?

我想知道什么是Spring Framework?为什么和何时应该在Java Enterprise开发中使用它?答案将是“依赖注入框架”。好了,使用依赖注入框架时我们有什么优势?用setter值和/或构造函数参数描述类的想法对我来说似乎很奇怪。为什么这样 因为我们可以更改属性而无需重新编译项目?这就是我们所获得的一切吗?

那么,我们应该用什么对象来描述beans.xml所有对象还是只有几个?

欢迎最简单的答案

马克·西曼(Mark Seemann):

我们使用依赖注入(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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章