Spring SpringMVC Springboot Java库⭐️中常见的注解以及具体代码使用方式案例

小伙伴们大家好,做过几个项目之后来总结下常用的注解以及使用方式

目录

一、Spring的常见注解

[1. 声明相关](#1. 声明相关)

[1.1 @Component](#1.1 @Component)

[1.2 @Service](#1.2 @Service)

[1.3 @Repository](#1.3 @Repository)

[1.4 @Controller](#1.4 @Controller)

[2. 依赖注入相关](#2. 依赖注入相关)

[2.1 @Autowired](#2.1 @Autowired)

[2.2 @Qualifier](#2.2 @Qualifier)

[2.3 @Resource](#2.3 @Resource)

[3. 作用域相关](#3. 作用域相关)

[3.1 @Scope](#3.1 @Scope)

[4. 配置相关](#4. 配置相关)

[4.1 @Configuration](#4.1 @Configuration)

[4.2 @ComponentScan](#4.2 @ComponentScan)

[4.3 @Bean](#4.3 @Bean)

[5. aop相关](#5. aop相关)

[5.1 @Aspect](#5.1 @Aspect)

[5.2 @Before](#5.2 @Before)

[5.3 @After](#5.3 @After)

[5.4 @Around](#5.4 @Around)

[5.5 @Pointcut](#5.5 @Pointcut)

二、SpringMVC常见注解

1.@RequestMapping

2.@RequestBody

3.@RequestParam

4.@PathVariable

5.@ResponseBody

6.@RestController

7.@RequestHeader

8.@GetMapping/@PostMapping

三、Springboot常见注解

1.@SpringbootApplication

四、Java库中常见注解

1.Lombok库

[1.1 @Data](#1.1 @Data)

[1.2 @Accessors(chain = true)](#1.2 @Accessors(chain = true))

[1.3 @Slf4j](#1.3 @Slf4j)


一、Spring的常见注解

1. 声明相关

1.1 @Component

@Component注解用于将一个类标记为Spring容器中的组件。这个注解很广泛地应用于各种类型的对象,例如服务、资源等。示例:

java 复制代码
@Component
public class MyComponent {
    // 这里的MyComponent类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
    // 比如 @Autowired private MyComponent myComponent;
}
1.2 @Service

@Service注解用于标记一个类作为业务逻辑层的服务组件。示例:

java 复制代码
@Service 
public class MyService { 
    // 这里的MyService类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
    // 比如 @Autowired private MyService myService;
}
1.3 @Repository

@Repository注解用于标记一个类作为数据访问层的持久化组件。示例:

java 复制代码
@Repository
public class MyRepositoryImpl implements MyRepository {
    // 这里的MyRepositoryImpl类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
}
1.4 @Controller

@Controller注解用于标记一个类作为Spring MVC中的控制器。示例:

java 复制代码
@Controller
public class MyController {
    // 这里的MyController类将被Spring MVC框架识别为控制器,并且可以处理特定URL的请求。
}

2. 依赖注入相关

2.1 @Autowired

@Autowired注解用于自动装配依赖关系。这个注解可以应用于构造函数、字段、setter方法和任意方法上。示例:

java 复制代码
@Component
public class MyService {
    
    @Autowired
    private MyRepository myRepository;

    // 这里的MyService类中的MyRepository字段会自动注入一个MyRepository类型的bean,这个bean必须在Spring容器中存在。
}
2.2 @Qualifier

@Qualifier注解用于指定具体的依赖对象,当多个相同类型的bean存在时使用。它通常与@Autowired注解一起使用。示例:

java 复制代码
@Service
public class MyServiceImpl implements MyService {

    @Autowired
    @Qualifier("myRepository2")
    private MyRepository myRepository;

    // 这里的@Qualifier注解指定了要注入的是名为"myRepository2"的MyRepository类型的bean。
}
2.3 @Resource

@Resource注解用于注入依赖对象,它可以根据名称进行自动装配。示例:

java 复制代码
@Component
public class MyService {

    @Resource
    private MyRepository myRepository;

    // 这里的MyRepository类型的依赖对象会被自动注入到MyService类中的myRepository字段中,它根据字段名"myRepository"来匹配容器中的bean。
}

3. 作用域相关

3.1 @Scope

@Scope注解用于指定bean的作用域。Spring容器会根据这个注解来管理bean的生命周期。示例:

java 复制代码
@Component
@Scope("prototype")
public class MyPrototypeBean {
    // 这里的MyPrototypeBean类被标记为prototype作用域,每次从容器中获取该bean时都会创建一个新的实例。
}

4. 配置相关

4.1 @Configuration

@Configuration注解用于标记一个类为配置类,通常与@Bean注解一起使用。示例:

java 复制代码
@Configuration
public class AppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    // 这里的@Configuration指令告诉Spring容器,该类是一个配置类,其中的@Bean指令告诉Spring容器,要创建一个名为"myBean"的bean,并返回一个新的MyBean实例。
}
4.2 @ComponentScan

@ComponentScan注解用于启用组件扫描,自动扫描并注册带有特定注解的组件。它通常与@Configuration注解一起使用。示例:

java 复制代码
@Configuration
@ComponentScan("com.example")
public class AppConfig {
    // 这里的@ComponentScan指令告诉Spring扫描com.example包及其子包以查找被标记为组件的类。
}
4.3 @Bean

@Bean注解用于声明一个方法返回一个由Spring容器管理的bean。这个注解通常与@Configuration注解一起使用。示例:

java 复制代码
@Configuration
public class AppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    // 这里的@Bean指令告诉Spring容器,要创建一个名为"myBean"的bean,并返回一个新的MyBean实例。
}

5. aop相关

5.1 @Aspect

@Aspect注解用于标记一个类为切面类。切面类定义了一系列切点和通知,用于在特定的连接点执行额外的逻辑。示例:

java 复制代码
@Aspect
@Component
public class LoggingAspect {
    // 这里的LoggingAspect类被标记为切面类,在Spring容器中实例化。它可以定义切点和通知方法。
}
5.2 @Before

@Before注解用于指定一个前置通知,在目标方法执行之前执行。示例:

java 复制代码
@Aspect
@Component
public class LoggingAspect {

    @Before("serviceMethods()")
    public void beforeAdvice() {
        System.out.println("Before advice executed");
    }

    // 这里的beforeAdvice()方法被定义为一个前置通知,在切点serviceMethods()匹配的方法执行之前打印一条消息。
}
5.3 @After

@After注解用于指定一个后置通知,在目标方法执行之后执行。示例:

java 复制代码
@Aspect
@Component
public class LoggingAspect {

    @After("serviceMethods()")
    public void afterAdvice() {
        System.out.println("After advice executed");
    }

    // 这里的afterAdvice()方法被定义为一个后置通知,在切点serviceMethods()匹配的方法执行之后打印一条消息。
}
5.4 @Around

@Around注解用于指定一个环绕通知,可以在目标方法执行前后都添加额外逻辑。这个通知可以完全控制目标方法的执行,包括是否执行目标方法以及如何处理返回值。示例:

java 复制代码
@Aspect
@Component
public class LoggingAspect {

    @Around("serviceMethods()")
    public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("Before method execution");
        Object result = joinPoint.proceed();
        System.out.println("After method execution");
        return result;
    }

    // 这里的aroundAdvice()方法被定义为一个环绕通知,它在切点serviceMethods()匹配的方法执行前后分别打印消息,并且通过joinPoint.proceed()调用执行目标方法。
}
5.5 @Pointcut

@Pointcut注解用于定义一个切点,即在程序执行过程中进行拦截的特定位置。它通常与@Before、@After等注解一起使用。示例:

java 复制代码
@Aspect
@Component
public class LoggingAspect {

    @Pointcut("execution(public * com.example.service.*.*(..))")
    public void serviceMethods() {}

    // 这里的serviceMethods()方法被定义为一个切点,它匹配com.example.service包中所有公共方法的执行。
}

二、SpringMVC常见注解

1.@RequestMapping

@RequestMapping注解用于将HTTP请求映射到控制器的处理方法。它可以指定请求的路径、HTTP方法、请求参数等信息。示例:

java 复制代码
@Controller
@RequestMapping("/users")
public class UserController {

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User getUserById(@PathVariable Long id) {
        // 这里的@RequestMapping注解将GET请求映射到/users/{id}路径,并调用getUserById()方法来处理请求。
    }

}

2.@RequestBody

@RequestBody注解用于将HTTP请求的请求体转换为方法参数对象。示例:

java 复制代码
@PostMapping("/users")
public void createUser(@RequestBody User user) {
    // 这里的@RequestBody注解将请求体中的JSON数据转换为User对象,并作为方法参数传递给createUser()方法。
}

3.@RequestParam

@RequestParam注解用于从HTTP请求中获取参数值,并将其作为方法参数传递。示例:

java 复制代码
@GetMapping("/users")
public List<User> getUsers(@RequestParam(name = "page", defaultValue = "1") int page) {
    // 这里的@RequestParam注解用于获取名为"page"的请求参数,并将其作为page参数传递给getUsers()方法。
}

4.@PathVariable

@PathVariable注解用于从URL中提取参数值,并将其作为方法参数传递。示例:

java 复制代码
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
    // 这里的@PathVariable注解将URL中的{id}占位符提取为id参数,并传递给getUserById()方法。
}

5.@ResponseBody

@ResponseBody注解用于将方法返回的对象转换为HTTP响应体。示例:

java 复制代码
@GetMapping("/users/{id}")
@ResponseBody
public User getUserById(@PathVariable Long id) {
    // 这里的@ResponseBody注解将getUserById()方法返回的User对象转换为HTTP响应体。
}

6.@RestController

@RestController注解是@Controller和@ResponseBody的组合,用于标记一个类为RESTful风格的控制器。示例:

java 复制代码
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/")
    public List<User> getUsers() {

    }
        // 这里的@RestController注解将UserController类标记为RESTful风格的控制器,它的所有处理方法都返回对象作为HTTP响应。

}

7.@RequestHeader

@RequestHeader注解用于获取HTTP请求头中的值,并将其作为方法参数传递。示例:

java 复制代码
@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authorization") String token) {
    // 这里的@RequestHeader注解用于获取名为"Authorization"的请求头的值,并将其作为token参数传递给getUsers()方法。
}

8.@GetMapping/@PostMapping

@GetMapping和@PostMapping是@RequestMapping的缩写形式,分别用于处理GET和POST请求。示例:

java 复制代码
@GetMapping("/users")
public List<User> getUsers() {
    // ...
}

@PostMapping("/users")
public void createUser(@RequestBody User user) {
    // ...
}
这里的@GetMapping注解用于处理GET请求,@PostMapping注解用于处理POST请求。

三、Springboot常见注解

1.@SpringbootApplication

用于标识Spring Boot应用程序的入口类,并启用自动配置和组件扫描。示例:

java 复制代码
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

四、Java库中常见注解

1.Lombok库

1.1 @Data

@Data 注解是 Lombok 中最常用的注解之一,它会自动为类生成一些通用的方法,包括 equals()hashCode()toString()gettersetter 等方法。使用 @Data 注解可以简化代码,避免手动编写这些通用方法。示例:

java 复制代码
import lombok.Data;

@Data
public class MyClass {
    private String name;
    private int age;
    
    // 自动生成 getter、setter、equals、hashCode、toString 等方法

}
1.2 @Accessors(chain = true)

@Accessors(chain = true)是Lombok库中的注解,用于生成链式调用的方法。当使用@Accessors(chain = true)注解时,Lombok会为标记了该注解的类生成符合链式调用风格的setter方法,并返回this对象,从而支持链式调用。示例:

java 复制代码
import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class User {
    private String username;
    private int age;
}

// 在其他类中的使用
User user = new User().setUsername("Alice").setAge(25);
1.3 @Slf4j

@Slf4j用于自动生成日志相关的字段和方法。它能够在类中快速生成一个名为"log"的日志对象,以便进行日志记录。使用@Slf4j注解后,可以直接在类中使用log对象进行日志输出,而无需手动创建Logger实例。

java 复制代码
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {
    public void myMethod() {
        log.info("This is a log message.");
    }
}
在上述示例中,使用@Slf4j注解后,就可以直接在myMethod()方法中使用log对象进行日志输出。
通过调用log的相应方法(如info、debug等),可以将日志信息输出到相应的日志文件或控制台。

章末

文章到这里就结束了


相关推荐
kinlon.liu7 分钟前
零信任安全架构--持续验证
java·安全·安全架构·mfa·持续验证
哈喽,树先生14 分钟前
1.Seata 1.5.2 seata-server搭建
spring·springcloud
王哲晓28 分钟前
Linux通过yum安装Docker
java·linux·docker
java66666888832 分钟前
如何在Java中实现高效的对象映射:Dozer与MapStruct的比较与优化
java·开发语言
Violet永存33 分钟前
源码分析:LinkedList
java·开发语言
执键行天涯34 分钟前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Jarlen1 小时前
将本地离线Jar包上传到Maven远程私库上,供项目编译使用
java·maven·jar
蓑 羽1 小时前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
Reese_Cool1 小时前
【C语言二级考试】循环结构设计
android·java·c语言·开发语言