1、简介:
Java 中的注解(Annotations)是一种元数据,可以附加到 Java 类、方法、局部变量、参数等上,以提供额外的信息。Java 自从引入注解特性以来,已经被广泛应用于各种框架和工具中,用于增强代码的功能性或者简化开发工作。
2、标准注解 (Standard Annotations)
2-1、@Override:表明一个方法重写了父类的方法
@Override
public void someMethod() {
// 方法体
}
2-2、@SuppressWarnings:用来抑制警告信息
@SuppressWarnings("unchecked")
public void unsafeOperation() {
// 方法体
}
2-3、@SafeVarargs:用来标记方法或构造函数,表明它们可以安全地接受方差类型的参数
@Override
public void someMethod() {
// 方法体
}
2-1、@Retention:指定注解的生命周期
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {}
2-2、@Target:指定注解适用的目标类型
@Target(ElementType.METHOD)
public @interface MyMethodAnnotation {}
2-3、@Documented:表明该注解应该被包含在 javadoc 中
@Documented
public @interface MyDocAnnotation {}
2-4、@Inherited:使子类能够继承父类上的注解
@Inherited
public @interface InheritedAnnotation {}
3、SpringBoot 常用注解
SpringBoot 介绍
Spring Boot 是一个基于 Spring 框架的快速应用开发平台,它简化了 Spring 应用的初始搭建以及开发过程。Spring Boot 使用了大量的注解来实现其功能,下面列出了一些在 Spring Boot 开发中常用的注解及其用途:
3-1、组件扫描与自动装配
3-1-1、@SpringBootApplication:这是一个组合注解,包含了 @SpringBootConfiguration
, @EnableAutoConfiguration
, @ComponentScan
。通常用于启动类上,标识这是一个 Spring Boot 应用
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3-1-2、@SpringBootConfiguration:表示这是一个 Spring 配置类,类似于 @Configuration
@SpringBootConfiguration
public class AppConfig {
// 配置类中的@Bean方法
}
3-1-3、@ComponentScan:用于扫描带有 @Component
或其派生注解(如 @Service
, @Repository
, @Controller
)的类
@SpringBootApplication(scanBasePackages = {"com.example.package"})
public class Application {
// ...
}
3-1-4、@EnableAutoConfiguration:启用自动配置,让 Spring Boot 根据类路径上的 jar 包自动配置 Bean。
@SpringBootApplication(scanBasePackages = {"com.example.package"})
public class Application {
// ...
}
3-1-5、@Autowired:自动装配 Bean。
@Service
public class ServiceImpl {
@Autowired
private Repository repository;
}
3-1-6、@Qualifier:与 @Autowired
结合使用,精确指定注入哪个 Bean。
@Autowired
@Qualifier("myBean")
private MyBean myBean;
3-2、控制器与 RESTful API
3-2-1、@Controller:标记一个类作为控制器类,处理 HTTP 请求。
@Controller
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello World!";
}
}
3-2-2、@RestController:组合了 @Controller
和 @ResponseBody
,用于直接返回 JSON 数据。
@RestController
public class MyRestController {
@GetMapping("/api/hello")
public String hello() {
return "Hello World!";
}
}
3-2-3、@RequestMapping:映射请求到方法上。
@Controller
public class MyController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello World!";
}
}
3-2-4、@GetMapping, @PostMapping, @PutMapping, @DeleteMapping:更具体的请求映射注解。
@RestController
public class MyRestController {
@GetMapping("/api/hello")
public String getHello() {
return "GET Hello World!";
}
@PostMapping("/api/hello")
public String postHello() {
return "POST Hello World!";
}
}
3-2-5、@PathVariable:获取 URL 路径中的变量。
@GetMapping("/users/{id}")
public String getUser(@PathVariable String id) {
return "User ID is " + id;
}
3-2-6、@RequestParam:获取请求参数。
@GetMapping("/users")
public String getUsers(@RequestParam String name) {
return "User Name is " + name;
}
3-2-7、@RequestBody:接收请求体中的数据。
@PostMapping("/users")
public String createUser(@RequestBody User user) {
return "Created User with ID " + user.getId();
}
3-2-8、@ResponseBody:将方法的返回值直接写入 HTTP 响应体。
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
3-3、数据访问层
3-3-1、@Repository:标记一个类作为 DAO 层。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
3-3-2、@Transactional:用于方法或类,声明事务边界。
@Service
public class UserService {
@Transactional
public void createUser(User user) {
// 创建用户的逻辑
}
}