Spring Bean 與依賴注入
您可以自由使用任何標準 Spring Framework 技術來定義您的 bean 及其注入的依賴項。我們通常建議使用建構子注入來連接依賴項,並使用 @ComponentScan
來尋找 bean。
如果您如上述建議般建構程式碼(將應用程式類別放在頂層套件中),您可以新增不帶任何引數的 @ComponentScan
,或使用隱含包含它的 @SpringBootApplication
註解。您的所有應用程式元件(@Component
、@Service
、@Repository
、@Controller
和其他元件)都會自動註冊為 Spring Bean。
以下範例顯示一個 @Service
Bean,它使用建構子注入來取得所需的 RiskAssessor
bean
-
Java
-
Kotlin
import org.springframework.stereotype.Service;
@Service
public class MyAccountService implements AccountService {
private final RiskAssessor riskAssessor;
public MyAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
}
// ...
}
import org.springframework.stereotype.Service
@Service
class MyAccountService(private val riskAssessor: RiskAssessor) : AccountService
如果一個 bean 有多個建構子,您需要使用 @Autowired
標記您希望 Spring 使用的建構子
-
Java
-
Kotlin
import java.io.PrintStream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyAccountService implements AccountService {
private final RiskAssessor riskAssessor;
private final PrintStream out;
@Autowired
public MyAccountService(RiskAssessor riskAssessor) {
this.riskAssessor = riskAssessor;
this.out = System.out;
}
public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
this.riskAssessor = riskAssessor;
this.out = out;
}
// ...
}
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import java.io.PrintStream
@Service
class MyAccountService : AccountService {
private val riskAssessor: RiskAssessor
private val out: PrintStream
@Autowired
constructor(riskAssessor: RiskAssessor) {
this.riskAssessor = riskAssessor
out = System.out
}
constructor(riskAssessor: RiskAssessor, out: PrintStream) {
this.riskAssessor = riskAssessor
this.out = out
}
// ...
}
請注意,使用建構子注入如何讓 riskAssessor 欄位標記為 final ,表示它之後不能被變更。 |