[[using.spring-beans-and-dependency-injection]]
== 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.
We generally recommend using constructor injection to wire up dependencies and `@ComponentScan` to find beans.

If you structure your code as suggested above (locating your application class in a top package), you can add `@ComponentScan` without any arguments or use the `@SpringBootApplication` annotation which implicitly includes it.
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:

[source,java,indent=0,subs="verbatim"]
----
include::{docs-java}/using/springbeansanddependencyinjection/singleconstructor/MyAccountService.java[]
----

If a bean has more than one constructor, you'll need to mark the one you want Spring to use with `@Autowired`:

[source,java,indent=0,subs="verbatim"]
----
include::{docs-java}/using/springbeansanddependencyinjection/multipleconstructors/MyAccountService.java[]
----

TIP: Notice how using constructor injection lets the `riskAssessor` field be marked as `final`, indicating that it cannot be subsequently changed.
