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

2023-12-21 17:08:39

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

目录

一、Spring的常见注解

1.? 声明相关

? ? ? ? 1.1 @Component

? ? ? ? 1.2 @Service

? ? ? ? 1.3??@Repository

? ? ? ? 1.4 @Controller

2. 依赖注入相关

? ? ? ? 2.1 @Autowired

? ? ? ? 2.2 @Qualifier

? ? ? ? 2.3 @Resource

3. 作用域相关

? ? ? ? 3.1 @Scope

4. 配置相关?

? ? ? ? 4.1 @Configuration

? ? ? ? 4.2 @ComponentScan

? ? ? ? 4.3 @Bean

5. aop相关

? ? ? ? 5.1 @Aspect

? ? ? ? 5.2 @Before

? ? ? ? 5.3 @After

? ? ? ? 5.4 @Around

? ? ? ? 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.2?@Accessors(chain = true)

? ? ? ? 1.3 @Slf4j


一、Spring的常见注解

1.? 声明相关

? ? ? ? 1.1 @Component

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

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

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

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

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

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

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

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

2. 依赖注入相关

? ? ? ? 2.1 @Autowired

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

@Component
public class MyService {
    
    @Autowired
    private MyRepository myRepository;

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

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

@Service
public class MyServiceImpl implements MyService {

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

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

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

@Component
public class MyService {

    @Resource
    private MyRepository myRepository;

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

3. 作用域相关

? ? ? ? 3.1 @Scope

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

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

4. 配置相关?

? ? ? ? 4.1 @Configuration

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

@Configuration
public class AppConfig {

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

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

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

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

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

@Configuration
public class AppConfig {

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

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

5. aop相关

? ? ? ? 5.1 @Aspect

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

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

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

@Aspect
@Component
public class LoggingAspect {

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

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

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

@Aspect
@Component
public class LoggingAspect {

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

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

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

@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等注解一起使用。示例:

@Aspect
@Component
public class LoggingAspect {

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

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

二、SpringMVC常见注解

????????1.@RequestMapping

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

@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请求的请求体转换为方法参数对象。示例:

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

? ? ? ? 3.@RequestParam

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

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

? ? ? ? 4.@PathVariable

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

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

? ? ? ? 5.@ResponseBody

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

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

? ? ? ? 6.@RestController

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

@RestController
@RequestMapping("/users")
public class UserController {

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

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

}

? ? ? ? 7.@RequestHeader

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

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

? ? ? ? 8.@GetMapping/@PostMapping

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

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

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

三、Springboot常见注解

? ? ? ? 1.@SpringbootApplication

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

@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 注解可以简化代码,避免手动编写这些通用方法。示例:

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对象,从而支持链式调用。示例:

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实例。?

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等),可以将日志信息输出到相应的日志文件或控制台。

?章末

? ? ? ? 文章到这里就结束了


文章来源:https://blog.csdn.net/TM007_/article/details/135124924
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。