SpringMVC中的自定义注解-1

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringMVC中的自定义注解-1

简介

注解(Annotation)在Java编程中的作用


在Java编程中,注解(Annotation)是一种元数据(metadata)标记,它们提供了对程序元素(如类、方法、字段等)的额外信息。注解通常不直接影响程序的运行,但它们可以被编译器、开发工具和框架等工具利用,以提供更多的语义信息和指导程序的行为。


以下是注解在Java编程中的一些重要作用:


提供元数据信息:注解可以附加元数据信息到程序元素上。例如,你可以使用注解来标记一个类是否是一个实体类,或者一个方法是否需要事务管理。这些元数据可以在运行时被读取和处理。


编译时检查:注解可以被编译器用来检查代码的正确性。例如,@Override注解用于标识子类中的方法覆盖了父类的方法,编译器可以检查是否满足覆盖的条件,如果不满足,则会报错。


代码生成:许多框架和工具可以根据注解生成代码。例如,JavaEE框架中的JPA(Java Persistence API)可以根据实体类上的注解自动生成数据库表结构。


文档生成:注解可以用于生成文档。通过工具如Javadoc,你可以使用注解来为类、方法和字段添加描述性信息,这些信息将生成到文档中,帮助其他开发人员理解代码的含义和用法。


运行时处理:在运行时,可以使用反射机制来读取和处理注解。这使得你能够根据注解的信息来调整程序的行为。例如,Spring框架中的依赖注入就是基于运行时处理注解的一个典型示例。


框架扩展:注解使得框架能够更加灵活和可扩展。开发者可以使用注解来扩展框架的功能,而不需要修改框架的源代码。


注解为Java编程带来了更多的灵活性、可读性和可维护性。它们是现代Java编程中不可或缺的一部分,被广泛用于各种领域,从基础的语法检查到大规模应用程序的开发和维护。

SpringMVC中的自定义注解


在SpringMVC中,自定义注解是一种非常有用的工具,它们可以帮助开发者更好地管理和控制Web应用程序的行为。以下是关于SpringMVC中自定义注解的重要性和用途的说明:


1. 控制器映射


重要性:自定义注解可以用于标记控制器类或方法,以定义请求的映射规则,将HTTP请求与相应的控制器方法关联起来。


用途:通过自定义注解,你可以创建自己的路由规则,以便更清晰地定义URL到控制器方法的映射。这样可以提高代码的可读性和维护性。


2. 参数验证和绑定

重要性:自定义注解可以用于验证和绑定请求参数,确保它们满足特定的条件和格式。


用途:通过自定义注解,你可以在方法参数上添加验证规则,例如校验参数是否为正整数或非空。这有助于保持控制器方法的干净和规范。


3. 安全性


重要性:自定义注解可以用于实施安全性控制,限制特定用户或角色的访问权限。


用途:通过自定义注解,你可以标记需要身份验证或授权的控制器方法,以确保只有授权用户可以访问敏感资源。


4. 日志记录

重要性:自定义注解可以用于记录方法的执行,以便进行调试和审计。


用途:通过自定义注解,你可以将方法的执行情况记录到日志中,包括方法的参数、返回值等信息,以便更容易诊断问题。


5. 自定义业务逻辑

重要性:自定义注解可以用于标记特定的业务逻辑或行为。


用途:通过自定义注解,你可以实现自己的业务规则,例如标记某个方法需要执行特殊的处理逻辑,或者标记方法作为事务边界。


总之,SpringMVC中的自定义注解是强大的工具,可以帮助开发者更好地组织、管理和控制Web应用程序的行为。它们提供了一种清晰、可扩展和可维护的方式来定义请求映射、参数验证、安全性、日志记录以及自定义业务逻辑。通过合理使用自定义注解,你可以提高代码的可读性,减少重复性代码,以及更好地满足项目的需求。

Java注解是什么?


Java注解是Java语言的一种特殊类型的元数据,它们可以在Java代码中通过注解标记程序的元素,如类、方法、变量等,以提供额外的信息。注解以 @ 符号为前缀,可以携带一些参数,用于描述被注解的元素的性质、特征或约束。


Java注解的声明形式类似于接口,但它们使用关键字 @interface 定义。注解可以包含元素,这些元素可以是基本类型、枚举、类、数组等类型。

为什么在Java开发中注解变得如此重要?


Java注解变得重要的原因有几个:


元数据标记和描述性信息:注解提供了一种在源代码中添加元数据和描述性信息的简单方式,可以用于描述程序元素的属性、特征和约束。


编译时检查和工具处理:注解可以用于编写编译时检查的规则,或者为开发工具提供信息。通过注解,可以实现更严格的代码检查,发现潜在的错误和问题。


代码生成和自动化:许多框架和工具可以根据注解生成代码,简化开发流程。例如,ORM(Object-Relational Mapping)框架可以根据实体类上的注解自动生成数据库映射。


框架和库的集成:注解可以用于框架和库中,使开发者可以通过简单的注解配置来定制框架或库的行为。这种可扩展性和灵活性使得开发更加高效和便捷。


元编程和反射:注解可以在运行时通过反射获取,使得程序可以根据注解信息动态地执行特定逻辑。这种特性为元编程提供了基础。


总的来说,Java注解为Java开发提供了一种强大的机制,可以帮助开发者更好地组织、描述、扩展和自动化代码。它们是现代Java开发中的重要工具,广泛用于各种框架、库和应用程序的开发和维护中。


提供一些常见的Java注解示例,如@Override、@Deprecated等。

Java注解分类

Java注解可以分为两大类:标准注解(JDK基本注解)和自定义注解。下面将对这两大类注解进行分类介绍。


1. 标准注解(JDK基本注解)

这些注解是Java语言自身提供的,用于标记和控制程序的行为。它们通常被广泛用于编写Java类、方法和字段,并由Java编译器、IDE和其他工具识别和处理。



(1) @Override


用途:用于标记子类中的方法覆盖了父类的方法。它可以帮助编译器检查方法是否正确地覆盖了父类方法。

(2) @Deprecated


用途:用于标记类、方法或字段已经不推荐使用,通常因为它们已经过时或有更好的替代方案。

(3) @SuppressWarnings


用途:用于抑制编译器生成的警告信息,通常用于临时禁用某些警告。

(4) @FunctionalInterface


用途:用于标记接口是一个函数式接口,即只有一个抽象方法,可以用于Lambda表达式。

(5) @SafeVarargs


用途:用于标记方法是安全的可变参数方法,可以抑制相关警告。

(6) @SuppressWarnings("serial")


用途:用于抑制编译器生成的关于缺少序列化ID的警告。

2. 自定义注解

自定义注解是开发者根据自己的需求创建的注解,用于标记和控制程序的行为。自定义注解通常用于框架、库和应用程序的开发,以提供额外的元数据信息和控制逻辑。


(1) 用途相关的自定义注解


这类注解根据应用的需要,可以用于标记特定的业务逻辑,如事务控制、日志记录、权限检查等。

(2) 参数验证的自定义注解


这类注解可以用于标记方法参数,以进行参数的验证和约束,如@NonNull、@NotBlank、@Positive等。

(3) 自定义路由和映射注解


这类注解可以用于标记控制器类和方法,自定义请求的映射规则,如SpringMVC中的@RequestMapping、@GetMapping等。

(4) 框架和库特定的自定义注解


许多框架和库会定义自己的自定义注解,用于控制其行为和配置,如Spring框架中的@Transactional、@Component等。

自定义注解使得开发者能够根据具体需求来扩展和增强Java程序的功能,提供了更高的灵活性和可定制性。它们通常需要开发者定义注解的结构和处理逻辑,以适应特定的应用场景。


详细讨论标准注解,如@Override、@Deprecated、@SuppressWarnings等,以及它们的用途。

JDK基本注解


JDK基本注解是Java开发工具包(JDK)中提供的一组预定义注解,用于标记代码的特定元素。这些注解包括:


@Override:用于标记方法覆盖(重写)父类中的方法。当一个方法使用了该注解时,编译器会检查该方法是否正确地覆盖了父类中的方法。

@Deprecated:用于标记已过时的方法、类或字段。当一个方法或类被标记为过时时,编译器会发出警告,提醒开发者不再推荐使用该方法或类。

@SuppressWarnings:用于抑制编译器产生的警告信息。可以在方法、类或整个代码块上使用该注解,以忽略特定类型的警告。

JDK元注解

什么是元注解?

元注解是用于注解其他注解的注解。换句话说,元注解是一种特殊类型的注解,它们用于对其他注解进行说明、配置和控制。元注解在Java中扮演着非常重要的角色,因为它们允许开发者自定义注解的行为和语义,从而满足特定需求。


在Java中,有一些内置的元注解,它们用于注解的声明和使用。以下是一些常见的元注解:


@Retention:用于指定注解的保留策略,即注解在编译时、运行时或者仅在源代码中保留。保留策略包括RetentionPolicy.SOURCE、RetentionPolicy.CLASS和RetentionPolicy.RUNTIME。


@Target:用于指定注解可以应用的目标元素类型,如类、方法、字段、参数等。目标类型包括ElementType.TYPE、ElementType.METHOD、ElementType.FIELD等。


@Documented:用于指定注解是否包含在Java文档中。如果一个注解被标记为@Documented,则它的文档信息将包括在生成的文档中。


@Inherited:用于指定注解是否可以被继承。如果一个注解被标记为@Inherited,则它可以被子类继承。


这些元注解在自定义注解中起着关键作用,它们允许开发者控制注解的保留策略、目标元素类型、文档生成和继承性。通过选择合适的元注解,可以自定义注解的行为和语义,以满足具体的需求。


介绍JDK中的元注解,包括:

@Retention://定义注解的保留策略
@Retention(RetentionPolicy.SOURCE)             //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)              //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME)            //注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target://指定被修饰的Annotation可以放置的位置(被修饰的目标)
@Target(ElementType.TYPE)                      //接口、类
@Target(ElementType.FIELD)                     //属性
@Target(ElementType.METHOD)                    //方法
@Target(ElementType.PARAMETER)                 //方法参数
@Target(ElementType.CONSTRUCTOR)               //构造函数
@Target(ElementType.LOCAL_VARIABLE)            //局部变量
@Target(ElementType.ANNOTATION_TYPE)           //注解
@Target(ElementType.PACKAGE)                   //包
//注:可以指定多个位置,例如:
@Target({ElementType.METHOD, ElementType.TYPE}),//也就是此注解可以在方法和类上面使用
@Inherited://指定被修饰的Annotation将具有继承性
@Documented://指定被修饰的该Annotation可以被javadoc工具提取成文档.


package com.liao.web;
import com.liao.annotation.aop.MyLog;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LogController {
    @RequestMapping("/mylog")
    @MyLog(desc = "这是结合spring aop知识,讲解自定义注解应用的一个案例")
    public void testLogAspect(){
        System.out.println("记录日志。。。");
    }
}


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
前端开发 Java 编译器
SpringMVC自定义注解---[详细介绍]
SpringMVC自定义注解---[详细介绍]
43 0
|
监控 Java 编译器
SpringMVC之自定义注解
SpringMVC之自定义注解
57 0
|
前端开发 Java
48SpringMVC - 参数绑定(自定义)
48SpringMVC - 参数绑定(自定义)
51 0
|
安全 Java 数据库连接
【springMvc】自定义注解的使用方式
【springMvc】自定义注解的使用方式
109 0
|
6月前
|
缓存 安全 Java
SpringMVC自定义注解和使用
SpringMVC自定义注解和使用
144 0
|
JSON 安全 Java
SpringMVC之自定义注解(这期博客带你领略自定义注解的魅力)
SpringMVC之自定义注解(这期博客带你领略自定义注解的魅力)
68 0
SpringMVC之自定义注解(这期博客带你领略自定义注解的魅力)
|
6月前
|
前端开发 安全 Java
解锁高级技巧:玩转 Spring MVC 自定义拦截器的神奇世界
解锁高级技巧:玩转 Spring MVC 自定义拦截器的神奇世界
108 0
|
Java 数据安全/隐私保护 Spring
SpringMVC之自定义注解
SpringMVC之自定义注解
45 1
|
Java 编译器 开发者
SpringMVC之自定义注解
SpringMVC之自定义注解
42 0
SpringMVC之自定义注解
|
11月前
|
Java
springmvc之自定义注解-->自定义注解简介,基本案例和aop自定义注解
springmvc之自定义注解-->自定义注解简介,基本案例和aop自定义注解
56 0