You are free to use any of the standard Spring Framework techniques to define your beans and their injected dependencies.
We often find that using @ComponentScan
(to find your beans) and using @Autowired
(to do 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.) are automatically registered as Spring Beans.
The following example shows a @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; } // ... }
If a bean has one constructor, you can omit the @Autowired
, as shown in the following example:
@Service public class DatabaseAccountService implements AccountService { private final RiskAssessor riskAssessor; public DatabaseAccountService(RiskAssessor riskAssessor) { this.riskAssessor = riskAssessor; } // ... }
Tip | |
---|---|
Notice how using constructor injection lets the |