17. Spring Beans and dependency injection
You are free to use any of the standard Spring Framework techniques to define your beans and their injected dependencies. For simplicity, we often find that using @ComponentScan
to find your beans, in combination with @Autowired
constructor injection works well.
If you structure your code as suggested above (locating your application class in a root package), you can add @ComponentScan
without any arguments. All of your application components (@Component
, @Service
, @Repository
, @Controller
etc.) will be automatically registered as Spring Beans.
Here is an example @Service
Bean that uses constructor injection to obtain a required RiskAssessor
bean.
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; } // ... }
Tip | |
---|---|
Notice how using constructor injection allows the riskAssessor field to be marked as final , indicating that it cannot be subsequently changed. |