我是Java Spring框架的新手。在一些文章中,他们说Spring框架具有依赖注入。为什么我们不说Java语言具有依赖注入功能,因为Spring基于Java?这种问题困扰了我一段时间。除了Java和Spring之外,我对ASP.NET MVC和C#也有这个问题。
以下是Spring Dependency Injection代码示例。如果我用Java创建一个小程序,它也会工作,对吗?
弹簧
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
@Autowired
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
Java:
public class DatabaseAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public DatabaseAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
更新(这是我困惑的地方):在纯Java中,我认为如果A类依赖于B类。在创建A类和B类之后,我们只需要去A类,然后做& #39;公众A(B b)'。除此之外,我们应该做些什么?
答案 0 :(得分:3)
1)因为在Spring 自动依赖注入已准备好使用功能。在普通的java中,您必须自己查找或创建您的依赖项,然后将其注入dependee。
注意字自动化。严格来说,是的,依赖注入已经存在于普通的Java中 但是作者肯定是自动的。
2)你的代码会起作用,但是你必须自己找到或创建一个RiskAssessor的实例,如果你正在创建它(就是Spring没有为你做到这一点),你将不得不全部给它它的依赖关系,然后构建然后DatabaseAccoutService。
如果DatabaseAccountService的依赖关系依赖于它们自身的很多依赖关系,那么你将会认可Spring为你做的工作。希望:))
---广告你的更新: 是的,这就是它。感谢这样的构造函数A(B b),将依赖关系b注入到类A的实例中。只是不要忘记,您将希望实际上将类B的实例作为参数调用构造函数A. 那就是你需要将B实例作为参数传递给你的地方。而且你必须创建它,并随着它创建它。 这就是为什么许多人使用DI框架收集家属并注入它们。
答案 1 :(得分:1)
想象一下,你需要使用钻头在墙上钻一个洞。你是否每次需要钻孔时都要自己钻一个钻头,或者你要重复使用同一个钻头,只是为它的使用提供动力? https://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html