wordpress pirobox重庆seo排名公司
Spring 约定编程案例与示例
案例 1:组件自动扫描(@ComponentScan
)
描述:通过包路径约定自动扫描组件,无需逐个配置Bean。
代码示例:
// 1. 目标组件(无需XML配置)
@Component // 使用Spring标准注解
class MyService {public void sayHello() {System.out.println("Hello from MyService!");}
}// 2. 配置类(约定包路径)
@Configuration
@ComponentScan("com.example.service") // 自动扫描该包下所有组件
public class AppConfig {}// 3. 运行类
public class Main {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);MyService service = context.getBean(MyService.class);service.sayHello(); // 输出:Hello from MyService!}
}
案例 2:REST 控制器映射(@RestController
)
描述:通过注解约定自动映射HTTP请求,无需XML配置。
代码示例:
// 1. 控制器类(约定路径前缀)
@RestController
@RequestMapping("/api") // 根路径约定
class UserController {@GetMapping("/users") // URL路径约定public String getUsers() {return "User list endpoint";}
}// 2. 启动类(Spring Boot约定)
@SpringBootApplication // 自动配置Web环境
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}// 运行后访问 http://localhost:8080/api/users 返回 "User list endpoint"
案例 3:Spring Boot 自动配置(@SpringBootApplication
)
描述:通过注解约定自动配置内嵌服务器、组件扫描等。
代码示例:
// 1. 主启动类(单文件约定)
@SpringBootApplication // 包含@ComponentScan和@EnableAutoConfiguration
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}// 2. 自动注册Bean(无需XML)
@Component
class AutoConfiguredBean {public AutoConfiguredBean() {System.out.println("Auto-configured bean initialized!");}
}// 启动时自动输出:Auto-configured bean initialized!
案例 4:JPA 实体类命名约定
描述:通过实体类命名约定自动关联数据库表名。
代码示例:
// 1. 实体类(表名约定)
@Entity
public class User { // 表名默认为 "user"@Id@GeneratedValueprivate Long id;private String name;// getters/setters
}// 2. Spring Data JPA 接口(方法名约定)
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByName(String name); // 自动生成SQL查询
}// 3. 使用示例
@Service
public class UserService {@Autowiredprivate UserRepository repository;public List<User> findUsersByName(String name) {return repository.findByName(name);}
}
案例 5:日志记录约定(@Slf4j
)
描述:通过Lombok注解约定自动注入日志对象。
代码示例:
// 1. 添加Lombok依赖(pom.xml)
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><scope>provided</scope>
</dependency>// 2. 使用注解约定
@Slf4j // 自动生成日志对象 "log"
@Component
public class MyService {public void doWork() {log.info("Processing task..."); // 直接使用log对象}
}
案例总结表
案例名称 | 核心约定 | 代码关键点 | 核心注解/配置 |
---|---|---|---|
组件自动扫描 | 通过包路径约定自动注册Bean | @ComponentScan("包路径") + @Component 注解的类自动被扫描 | @ComponentScan , @Component |
REST 控制器映射 | 通过注解约定HTTP方法和路径 | @RestController + @RequestMapping /@GetMapping 等路径映射注解 | @RestController , @RequestMapping |
Spring Boot 自动配置 | 通过注解启用内嵌服务器、组件扫描和自动配置 | @SpringBootApplication 等效于 @Configuration , @ComponentScan , @EnableAutoConfiguration | @SpringBootApplication |
JPA 实体类命名 | 实体类名默认对应数据库表名(如 User 对应表 user ) | @Entity 注解的类名自动映射为小写表名 | @Entity , Spring Data JPA方法名约定 |
Lombok 日志约定 | 通过注解自动生成日志对象(无需手动创建Logger ) | @Slf4j 注解自动生成log 对象 | @Slf4j (Lombok) |
关键约定说明
- 包路径约定:组件扫描默认从主类所在包及子包开始扫描。
- REST路径约定:
@RequestMapping
的路径前缀可复用,方法名如saveUser
自动映射为/save-user
。 - Spring Boot 自动配置:
@SpringBootApplication
会自动启用内嵌Tomcat、静态资源处理等。 - JPA 方法名约定:
findByName
等方法名按规则自动生成查询SQL。 - Lombok注解:通过注解自动生成setter/getter、构造函数等代码。