目录
[一、Web MVC 开发时,对于三层的类注解](#一、Web MVC 开发时,对于三层的类注解)
[1.1 @Controller](#1.1 @Controller)
[1.2 @Service](#1.2 @Service)
[1.3 @Repository](#1.3 @Repository)
[1.4 @Component](#1.4 @Component)
[2.1 @Autowired](#2.1 @Autowired)
[2.2 @Resource](#2.2 @Resource)
[2.3 @Resource 与 @Autowired 的区别](#2.3 @Resource 与 @Autowired 的区别)
[2.3.1 实例讲解](#2.3.1 实例讲解)
[2.4 @Value](#2.4 @Value)
[2.5 @Data](#2.5 @Data)
[三、Web 常用的注解](#三、Web 常用的注解)
[3.1 @RequestMapping](#3.1 @RequestMapping)
[3.2 @RequestParam](#3.2 @RequestParam)
[3.2.1 语法](#3.2.1 语法)
[3.2.2 实例](#3.2.2 实例)
[3.3 @PathVariable](#3.3 @PathVariable)
[3.4 @RequestParam 和 @PathVariable 区别](#3.4 @RequestParam 和 @PathVariable 区别)
[3.5 @ResponseBody 和 @RequestBody](#3.5 @ResponseBody 和 @RequestBody)
[3.6 @RestController](#3.6 @RestController)
[3.7 @ControllerAdvice 和 @ExceptionHandler](#3.7 @ControllerAdvice 和 @ExceptionHandler)
[四、Spring Boot 常用的注解](#四、Spring Boot 常用的注解)
[4.1 @SpringBootApplication](#4.1 @SpringBootApplication)
[4.2 @EnableAutoConfiguration](#4.2 @EnableAutoConfiguration)
[4.3 @Configuration](#4.3 @Configuration)
[4.4 @ComponentScan](#4.4 @ComponentScan)
[五、AOP 常用的注解](#五、AOP 常用的注解)
[5.1 @Aspect](#5.1 @Aspect)
[5.2 @After](#5.2 @After)
[5.3 @Before](#5.3 @Before)
[5.4 @Around](#5.4 @Around)
[5.5 @Pointcut](#5.5 @Pointcut)
[6.1 @SpringBootTest](#6.1 @SpringBootTest)
[6.2 @Test](#6.2 @Test)
[6.3 @RunWith](#6.3 @RunWith)
[6.4 其他测试注解](#6.4 其他测试注解)
[7.1 @Transactional](#7.1 @Transactional)
[7.2 @Cacheable](#7.2 @Cacheable)
[7.3 @PropertySource](#7.3 @PropertySource)
[7.4 @Async](#7.4 @Async)
[7.5 @EnableAsync](#7.5 @EnableAsync)
[7.6 @EnableScheduling](#7.6 @EnableScheduling)
[7.7 @Scheduled](#7.7 @Scheduled)
一、Web MVC 开发时,对于三层的类注解
1.1 @Controller
@Controller
注解用于标识一个类是 Spring MVC 控制器,处理用户请求并返回相应的视图。
java
@Controller
public class MyController {
// Controller methods
}
1.2 @Service
@Service
注解用于标识一个类是业务层组件,通常包含了业务逻辑的实现。
java
@Service
public class MyService {
// Service methods
}
1.3 @Repository
@Repository
注解用于标识一个类是数据访问层组件,通常用于对数据库进行操作
java
@Repository
public class MyRepository {
// Data access methods
}
1.4 @Component
@Component
是一个通用的组件标识,可以用于标识任何层次的组件,但通常在没有更明确的角色时使用。
java
@Component
public class MyComponent {
// Class implementation
}
二、依赖注入的注解
2.1 @Autowired
@Autowired
注解用于自动装配 Bean,可以用在字段、构造器、方法上
java
@Service
public class MyService {
@Autowired
private MyRepository myRepository;
}
2.2 @Resource
@Resource
注解也用于依赖注入,通常用在字段上,可以指定要注入的 Bean 的名称
java
@Service
public class MyService {
@Resource(name = "myRepository")
private MyRepository myRepository;
}
2.3 @Resource
与 @Autowired
的区别
@Autowired
是 Spring 提供的注解,按照类型进行注入。@Resource
是 JavaEE 提供的注解,按照名称进行注入。在 Spring 中也可以使用,并且支持指定名称。
2.3.1 实例讲解
新建 Animal
接口类,以及两个实现类 Cat
和 Dog
。
java
public interface Animal {
String makeSound();
}
@Component
public class Cat implements Animal {
@Override
public String makeSound() {
return "Meow";
}
}
@Component
public class Dog implements Animal {
@Override
public String makeSound() {
return "Woof";
}
}
编写测试用例:
java
@Service
public class AnimalService {
@Autowired
private Animal cat;
@Resource(name = "dog")
private Animal dog;
public String getCatSound() {
return cat.makeSound();
}
public String getDogSound() {
return dog.makeSound();
}
}
2.4 @Value
@Value
注解用于从配置文件中读取值,并注入到属性中。
java
@Service
public class MyService {
@Value("${app.message}")
private String message;
}
2.5 @Data
@Data
是 Lombok 提供的注解,用于自动生成 Getter、Setter、toString 等方法。
java
@Data
public class MyData {
private String name;
private int age;
}
三、Web 常用的注解
3.1 @RequestMapping
@RequestMapping
注解用于映射请求路径,可以用在类和方法上。
java
@Controller
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring!";
}
}
3.2 @RequestParam
@RequestParam
注解用于获取请求参数的值。
3.2.1 语法
java
@RequestParam(name = "paramName", required = true, defaultValue = "default")
3.2.2 实例
java
@GetMapping("/greet")
public String greet(@RequestParam(name = "name", required = false, defaultValue = "Guest") String name) {
return "Hello, " + name + "!";
}
3.3 @PathVariable
@PathVariable
注解用于从 URI 中获取模板变量的值。
java
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
// Retrieve user by ID
}
3.4 @RequestParam
和 @PathVariable
区别
@RequestParam
用于获取请求参数。@PathVariable
用于获取 URI 中的模板变量。
3.5 @ResponseBody
和 @RequestBody
@ResponseBody
注解用于将方法的返回值直接写入 HTTP 响应体中。@RequestBody
注解用于从 HTTP 请求体中读取数据。
3.6 @RestController
@RestController
注解相当于 @Controller
和 @ResponseBody
的组合,用于标识 RESTful 风格的控制器。
java
@RestController
@RequestMapping("/api")
public class MyRestController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring!";
}
}
3.7 @ControllerAdvice
和 @ExceptionHandler
@ControllerAdvice
注解用于全局处理异常,@ExceptionHandler
用于定义处理特定异常的方法。
java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
}
}
四、Spring Boot 常用的注解
4.1 @SpringBootApplication
@SpringBootApplication
是一个复合注解,包含了 @SpringBootConfiguration
、@EnableAutoConfiguration
和 @ComponentScan
java
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
4.2 @EnableAutoConfiguration
@EnableAutoConfiguration
注解用于开启 Spring Boot 的自动配置机制。
4.3 @Configuration
@Configuration
注解用于定义配置类,替代传统的 XML 配置文件。
java
@Configuration
public class MyConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
4.4 @ComponentScan
@ComponentScan
注解用于配置组件扫描的基础包。
java
@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
五、AOP 常用的注解
5.1 @Aspect
@Aspect
注解用于定义切面类,通常与其他注解一起使用。
java
@Aspect
@Component
public class MyAspect {
// Aspect methods
}
5.2 @After
@After
注解用于定义后置通知,方法在目标方法执行后执行。
java
@After("execution(* com.example.service.*.*(..))")
public void afterMethod() {
// After advice
}
5.3 @Before
@Before
注解用于定义前置通知,方法在目标方法执行前执行
java
@Before("execution(* com.example.service.*.*(..))")
public void beforeMethod() {
// Before advice
}
5.4 @Around
@Around
注解用于定义环绕通知,方法可以控制目标方法的执行。
java
@Around("execution(* com.example.service.*.*(..))")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {
// Before advice
Object result = joinPoint.proceed(); // Proceed to the target method
// After advice
return result;
}
5.5 @Pointcut
@Pointcut
注解用于定义切点,将切点表达式提取出来,供多个通知共享。
java
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() {
// Pointcut expression
}
六、测试常用的注解
6.1 @SpringBootTest
@SpringBootTest
注解用于启动 Spring Boot 应用程序的测试。
java
@SpringBootTest
public class MyApplicationTests {
// Test methods
}
6.2 @Test
@Test
注解用于标识测试方法。
java
@Test
public void myTestMethod() {
// Test method
}
6.3 @RunWith
@RunWith
注解用于指定运行测试的类。
java
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
// Test methods
}
6.4 其他测试注解
@Before
: 在测试方法之前执行。@After
: 在测试方法之后执行。@BeforeClass
: 在类加载时执行一次。@AfterClass
: 在类卸载时执行一次。
七、其他常用注解
7.1 @Transactional
@Transactional
注解用于声明事务,通常用在方法或类上。
java
@Service
@Transactional
public class MyTransactionalService {
// Transactional methods
}
7.2 @Cacheable
@Cacheable
注解用于声明方法的结果可以被缓存。
java
@Service
public class MyCachingService {
@Cacheable("myCache")
public String getCachedData(String key) {
// Method implementation
}
}
7.3 @PropertySource
@PropertySource
注解用于引入外部的属性文件。
java
@Configuration
@PropertySource("classpath:my.properties")
public class MyConfig {
// Configuration methods
}
7.4 @Async
@Async
注解用于声明异步方法,通常用在方法上。
java
@Service
public class MyAsyncService {
@Async
public void asyncMethod() {
// Asynchronous method implementation
}
}
7.5 @EnableAsync
@EnableAsync
注解用于开启异步方法的支持。
java
@Configuration
@EnableAsync
public class MyConfig {
// Configuration methods
}
7.6 @EnableScheduling
@EnableScheduling
注解用于开启计划任务的支持。
java
@Configuration
@EnableScheduling
public class MyConfig {
// Configuration methods
}
7.7 @Scheduled
@Scheduled
注解用于定义计划任务的执行时间。
java
@Service
public class MyScheduledService {
@Scheduled(cron = "0 0 12 * * ?") // Run every day at 12 PM
public void scheduledMethod() {
// Scheduled method implementation
}
}
以上几乎涵盖了所有springBoot和springFramework的常见注解,博客整体框架参考学习Spring Boot 注解,这一篇就够了(附带部分注解实例讲解)_springboot注解 举例-CSDN博客