Phillip Webb 0e906dc6e2 Use convention based code imports
Closes gh-29647
2022-02-04 19:46:44 -08:00

52 lines
2.3 KiB
Plaintext

[[using.structuring-your-code]]
== Structuring Your Code
Spring Boot does not require any specific code layout to work.
However, there are some best practices that help.
[[using.structuring-your-code.using-the-default-package]]
=== Using the "`default`" Package
When a class does not include a `package` declaration, it is considered to be in the "`default package`".
The use of the "`default package`" is generally discouraged and should be avoided.
It can cause particular problems for Spring Boot applications that use the `@ComponentScan`, `@ConfigurationPropertiesScan`, `@EntityScan`, or `@SpringBootApplication` annotations, since every class from every jar is read.
TIP: We recommend that you follow Java's recommended package naming conventions and use a reversed domain name (for example, `com.example.project`).
[[using.structuring-your-code.locating-the-main-class]]
=== Locating the Main Application Class
We generally recommend that you locate your main application class in a root package above other classes.
The <<using#using.using-the-springbootapplication-annotation, `@SpringBootApplication` annotation>> is often placed on your main class, and it implicitly defines a base "`search package`" for certain items.
For example, if you are writing a JPA application, the package of the `@SpringBootApplication` annotated class is used to search for `@Entity` items.
Using a root package also allows component scan to apply only on your project.
TIP: If you do not want to use `@SpringBootApplication`, the `@EnableAutoConfiguration` and `@ComponentScan` annotations that it imports defines that behavior so you can also use those instead.
The following listing shows a typical layout:
[indent=0]
----
com
+- example
+- myapplication
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
----
The `MyApplication.java` file would declare the `main` method, along with the basic `@SpringBootApplication`, as follows:
include::code:MyApplication[]