17.1 JavaWeb-常用注解

常用注解概览:

注解描述
@Autowired用于自动装配Bean依赖,由Spring框架提供。
@Component用于将类标记为Spring的组件,表示这个类会被Spring进行管理。
@ControllerAdvice用于定义全局异常处理器类,可以捕获应用中抛出的异常,并统一处理。
@Data自动生成通用的方法,如equals、hashCode、toString、getter和setter等。
@ExceptionHandler用于标记方法,指定该方法处理特定异常类型。
@Override用于标记方法重写父类或接口中的方法,编译器会检查是否正确重写。
@PathVariable用于从URL路径中获取参数值,将参数绑定到方法的参数上。
@RequestMapping用于将请求URL映射到处理请求的方法上,指定HTTP方法、路径等。
@RequestBody用于将请求体中的内容绑定到方法的参数上,通常用于接收JSON或XML格式的请求数据。
@ResponseBody用于将方法的返回值直接作为响应体返回给客户端,通常用于返回JSON或XML格式的响应数据。
@RestController将类标识为一个控制器,并默认返回JSON或XML格式的响应。
@Slf4jLombok 提供的注解,自动生成一个日志记录器变量,用于方便地在代码中进行日志记录。
@Resource实现依赖注入,将相应的依赖对象注入到目标类中。
@Transactional标记事务的边界,在方法执行时开启一个事务,并根据执行结果进行事务的提交或回滚。
@RequestParam用于从请求参数中获取值,将参数绑定到方法的参数上。
@Aspect切面,标记一个类为切面类,其中定义了切面的逻辑和通知的行为
@Pointcut切点,用于定义切入点表达式,指定在哪些连接点上应用切面逻辑。
@Before前置通知,指定在目标方法执行之前执行的逻辑。
@After后置通知,指定在目标方法执行之后执行的逻辑,无论方法是否发生异常都会执行。
@AfterReturning返回通知,指定在目标方法正常返回后执行的逻辑。
@AfterThrowing异常通知,指定在目标方法抛出异常后执行的逻辑。
@Around环绕通知,指定包围目标方法的逻辑,在方法执行前后都可以执行自定义的操作。

1.@Autowired & @Resource

        @Autowired和@Resource都是用于依赖注入的注解,但它们在使用方式和依赖对象的查找方式上有所不同。

1.1 @Autowired

        @Autowired注解是Spring框架提供的注解,它根据类型进行自动装配

@Component
public class UserService {
    @Autowired
    private User user;
}

         在上述示例中,使用@Autowired注解将User对象注入到UserService类中,Spring容器会根据UserRepository类型进行自动装配,并将匹配的Bean注入到user字段中。

1.2 @Resource

        @Resource注解是JavaEE提供的注解,也可以用于依赖注入。它提供了更灵活的方式进行依赖对象的查找,可以按照名称或类型进行注入。

@Component
public class UserService {
    @Resource
    private User user;
}

        在上述示例中,使用@Resource注解将User对象注入到UserService类的中,@Resource注解默认按照字段名进行依赖对象的查找和匹配,也可以通过name属性指定依赖对象的名称 

1.3 @Autowired & @Resource的区别

        1.@Autowired注解是Spring提供的,用于自动装配Bean依赖。它可以通过类型匹配来自动注入依赖对象,但如果存在多个符合条件的候选对象时,默认使用byType的方式进行自动装配。

        2.@Resource注解是JavaEE提供的,也可以用于自动装配依赖对象。它可以通过名称匹配来自动注入依赖对象,默认使用byName的方式进行自动装配。

2.@Component & @Controller & @Service & @Mapper

        @Component:用于将类标记为Spring的组件,表示这个类会被Spring进行管理。它是一个通用的注解,可以用于标记任何类。通常用于标记普通的Java类,表示这些类需要由Spring进行实例化和管理。

        而@Controller、@Service和@Mapper则是更具体的角色注解

作用
实例化对象当 Spring 容器启动时,会扫描配置文件或基于注解的配置类,并创建被 @Component 注解标记的类的实例。对象的创建工作由 Spring 容器完成。
组件扫描@Component 注解是基于组件扫描的机制实现的。Spring 容器会扫描指定的包路径,查找所有被 @Component 注解标记的类,并将其实例化为 Spring 管理的组件。
依赖注入@Component 注解标记的类可以通过 Spring 的依赖注入机制获取其他组件的实例。使用 @Autowired 或其他注解来注入依赖的组件。
AOP 支持@Component 注解是实现面向切面编程(AOP)的基础。通过在组件类上添加 @Aspect 注解,将其标记为切面类,实现对方法的增强、日志记录、事务管理等功能。

3.@Aspect & @Pointcut & @Before @After & @Around &  @AfterReturning & @AfterThrowing & @Transactional

        这些注解的组合可以用于实现面向切面编程(AOP)的功能。通过定义切面类并结合这些注解,可以在特定的连接点上执行增强操作,例如日志记录、事务管理、性能监控等

@Aspect
@Component
public class CustomAdvice {
    //切点
    @Pointcut("execution(* com.property.service.impl.*.*(..))")
    public void pc(){}
    @Before("pc()")
    public void before(){System.out.println("-----");}
}
@Aspect切面,标记一个类为切面类,其中定义了切面的逻辑和通知的行为
@Pointcut切点,用于定义切入点表达式,指定在哪些连接点上应用切面逻辑。
@Before前置通知,指定在目标方法执行之前执行的逻辑。
@After后置通知,指定在目标方法执行之后执行的逻辑,无论方法是否发生异常都会执行。
@AfterReturning返回通知,指定在目标方法正常返回后执行的逻辑。
@AfterThrowing异常通知,指定在目标方法抛出异常后执行的逻辑。
@Around环绕通知,指定包围目标方法的逻辑,在方法执行前后都可以执行自定义的操作。
@Transactional指示 Spring 在方法执行时开启一个事务,并在方法执行结束时根据执行结果进行事务的提交或回滚
    //rollbackFor 因为抛指定异常回滚
    //noRollbackFor 不因为指定的异常回滚
    //spring在管理事务时只有遇到运行时异常才会回滚,默认情况下编译时异常不行
    //@Transactional(rollbackFor = OutOddStockException.class)

4.@ControllerAdvice & @ExceptionHandler

        @ControllerAdvice 是一个注解,用于定义全局异常处理器类。它可以用于捕获应用中抛出的异常,并统一处理这些异常,提供自定义的异常处理逻辑。

        @ExceptionHandler 是 @ControllerAdvice 注解下的一个注解,用于标记异常处理方法。它指定了该方法可以处理特定类型的异常。

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseResult<Object> HandlerException(Exception e){
        //判断异常类型,根据不同异常类型,进行不同的处理
        if(e instanceof IOException){
            //文件处理
            log.debug("文件处理异常");
        }else if(e instanceof IndexOutOfBoundsException){
            //越界异常
            log.debug("越界异常");
        }else if(e instanceof ArithmeticException){
            //除0
            log.debug("除零");
        }
        return new ResponseResult<>(500,e.getMessage(),null);
    }
}

        @RestControllerAdvice 是一个注解,结合了 @RestController 和 @ControllerAdvice 的功能 

        1.@RestControllerAdvice 注解标记了 GlobalExceptionHandler 类,表示它是一个全局异常处理器类,并且可以返回响应体

        2.定义了一个异常处理方法 handleException,它使用 @ExceptionHandler(Exception.class) 注解标记,表示该方法用于处理 Exception 类型的异常。

5.@Data & @NoArgsConstructor & @AllArgsConstructor

        @Data、@NoArgsConstructor 和 @AllArgsConstructor 是 Lombok 提供的注解,用于自动生成类的通用方法和构造函数。

@Data自动生成通用的方法,如equals、hashCode、toString、getter和setter等。
@NoArgsConstructor无参构造
@AllArgsConstructor有参构造

6.@Override

        @Override 是 Java 中的注解之一,用于标记一个方法覆盖(重写)了父类或接口中的方法

7.@PathVariable & @RequestParam & @RequestBody

        @PathVariable、@RequestParam和@RequestBody是Spring框架中用于处理HTTP请求参数的注解

7.1 @PathVariable

        @PathVariable注解用于从请求的URL路径中获取参数值。它将URL中的占位符与方法参数进行绑定。

axios.get('/users/' + id).then(response => {// 处理返回的响应数据})
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable("id") int id) {
        // 根据id获取用户
        // 返回用户信息的ResponseEntity对象
    }
}

7.2 @RequestParam

        @RequestParam注解用于从请求的查询字符串或表单参数中获取参数值,它可以指定参数的名称和默认值。

axios.get('/users/search', {params: {name: 'John'}}).then(response => {// 处理返回的响应数据})
@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/search")
    public ResponseEntity<List<User>> searchUsers(@RequestParam("name") String name) {
        // 根据name查询用户
        // 返回包含用户信息的ResponseEntity对象
    }
}

7.3 @RequestBody

        @RequestBody注解用于从请求体中获取参数值,它将请求的内容绑定到方法参数上,通常用于处理POST请求中的JSON或XML数据。

axios.post('/users', {name: 'John',age: 25}).then(response => {// 处理返回的响应数据})
@RestController
@RequestMapping("/users")
public class UserController {
    @PostMapping("/")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 创建新用户
        // 返回创建的用户信息的ResponseEntity对象
    }
}

8.@RequestMapping & @ResponseBody

        @RequestMapping和@ResponseBody是Spring MVC中用于处理HTTP请求和响应的注解

8.1 @RequestMapping

        @RequestMapping注解用于映射URL路径到控制器方法,通过在方法上使用该注解,可以指定处理特定URL请求的方法。可以通过多种方式配置该注解,例如指定请求的HTTP方法(GET、POST等)、路径、请求参数等。

8.2 @ResponseBody

        @ResponseBody注解用于指示方法返回的结果要作为响应体直接返回,而不是视图名称。当使用@ResponseBody注解时,返回的数据会直接序列化为JSON或其他格式的响应体返回给客户端。

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

    @GetMapping("/{id}")
    @ResponseBody
    public User getUserById(@PathVariable Long id) {
        // 根据ID查询用户信息并返回
        User user = userService.getUserById(id);
        return user;
    }
}

10.@Slf4j

        @Slf4j是一个Java库,它提供了一种简洁的方式来在代码中使用日志记录功能。它是基于Simple Logging Facade for Java (SLF4J)的一个注解,可以通过在类或字段上添加@Slf4j注解来自动创建一个名为"log"的日志记录器。

        使用@Slf4j注解后,就可以在代码中直接使用"log"日志记录器,而无需手动创建和初始化。可以使用不同的日志级别(如debug、info、warn、error)以及不同的日志方法(如debug()、info()、warn()、error())记录日志信息。

@Slf4j
public class ExampleClass { 
    public void someMethod() {
        log.debug("This is a debug message");
        log.info("This is an info message");
        log.warn("This is a warning message");
        log.error("This is an error message");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值