17.JavaWeb-注解

这篇具有很好参考价值的文章主要介绍了17.JavaWeb-注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.注解的概念

        注解(Annotation)是一种元数据的表示方式,用于给代码添加额外的信息、配置或指示。注解以特定的语法规则或标记标识,并可以应用于类、方法、字段、参数等程序元素上。

1.1 注解的作用

1.1.1 提供额外的元数据信息

        注解可以用于提供额外的信息,如作者、版本号、创建时间等。这些信息可以被编译器、框架或工具读取和利用,例如生成文档、生成代码等。

1.1.2 配置程序行为

        注解可以用于配置程序的行为,通过在代码中添加注解,可以告诉框架或工具如何处理代码。例如,使用注解来实现依赖注入、事务管理、路由映射等功能。

1.1.3 实现编译时检查

        某些注解可以在编译时进行静态检查,以确保代码的正确性或符合特定的规范。例如,@Override注解可以确保子类正确地重写了父类的方法,@SuppressWarnings注解可以抑制编译器的警告。

1.1.4 自动生成代码

        某些框架或工具可以根据注解自动生成代码,以简化开发过程。例如,基于Hibernate的ORM框架可以根据实体类上的注解自动生成数据库表结构,基于Spring MVC的框架可以根据控制器类上的注解生成路由映射。

1.1.5 运行时处理

        在程序运行时,可以使用反射机制读取和处理注解信息,从而实现动态的行为。例如,JUnit框架可以通过读取测试方法上的注解来执行单元测试。

1.1.6 元编程

        注解可以用于编写更高级的代码生成工具或框架。通过读取和处理注解信息,可以实现自定义的代码生成、代码分析、代码转换等功能。

2.内置注解

注解 描述
@Override 标记方法覆盖父类的方法,编译器会检查方法名和参数是否正确。
@Deprecated 标记不推荐使用的方法或类,编译器会给出警告。
@SuppressWarnings 抑制编译器的警告信息,用于忽略特定类型的警告。
@FunctionalInterface 标记函数式接口,确保接口只有一个抽象方法,以便于使用 Lambda 表达式。
@SafeVarargs 标记方法参数为可变参数,并确保方法不会产生类型不安全的警告。

3.元注解

        元注解是指用于注解其他注解的注解,即用于定义和配置注解的注解,元注解提供了对注解进行更精细控制和配置的能力

注解 描述
@Target 指定注解可以应用的目标元素类型,例如类、方法、字段等。
@Retention 指定注解的生命周期,即注解在运行时是否可用。
@Documented 指定注解是否应该被包含在 Java 文档中。
@Inherited 指定注解是否可以被继承。

4.自定义注解

【基于Spring框架】

4.1 创建注解类

        使用 @interface 关键字定义一个注解类型,注解类型的名称应遵循驼峰式

public @interface MyAnnotation {}

4.2 添加元注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) 表示该注解可以应用在方法上
@Retention(RetentionPolicy.RUNTIME) 表示该注解在运行时保留,可以通过反射机制读取 

4.2 定义注解元素

        注解元素类似于接口的方法,可以有返回值和默认值

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "";
    int priority() default 0;
    // 其他属性...
}

4.3 使用自定义注解

        在需要的地方通过@注解名称即可

    @MyAnnotation(value = "custom", priority = 1)
    public void doSomething() {}

4.4 处理注解

        在需要处理自定义注解的代码中,通过反射机制读取注解信息,并进行相应的处理逻辑。可以使用java.lang.reflect包中的类和方法来获取注解信息

@Component
public class MyAnnotationProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        Class<?> beanClass = bean.getClass();
        Method[] methods = beanClass.getDeclaredMethods();
        for (Method method : methods) {
            if (method.isAnnotationPresent(MyAnnotation.class)) {
                MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
                // 读取注解信息,并进行相应的处理逻辑
                String value = annotation.value();
                int priority = annotation.priority();
            }
        }
        return bean;
    }
}

        BeanPostProcessor 接口是 Spring 框架提供的一个扩展接口,用于在 Bean 实例化和初始化的过程中插入自定义的处理逻辑。通过实现 BeanPostProcessor 接口,可以对容器中的 Bean 进行统一的前置处理和后置处理操作。

        postProcessBeforeInitialization方法会在每个Bean初始化之前调用,在方法内部,先获取到当前Bean的类对象bean.class,然后通过反射获取该类中声明的所有方法,并遍历这些方法判断是否有@MyAnnotation注解

        如果存在 MyAnnotation 注解,通过 method.getAnnotation(MyAnnotation.class) 方法获取到方法上的注解对象,并可以进一步读取注解中定义的属性值,例如 value 和 priority

        当Spring容器启动时,会自动扫描并实例化MyAnnotationProcessor并将其作为 BeanPostProcessor 应用于容器中的所有 Bean。当容器初始化 Bean 的过程中,会调用 postProcessBeforeInitialization 方法,实现对带有 @MyAnnotation 注解的方法进行处理。文章来源地址https://www.toymoban.com/news/detail-556780.html

到了这里,关于17.JavaWeb-注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaSE、JavaEE、JavaWeb 三大工程目录详解

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! JavaSE、JavaEE 和 JavaWeb 是 Java 开发中的三个重要框架,它们都是为了支持 Java 应用程序的开发而设计

    2023年04月09日
    浏览(36)
  • JavaWeb——2.注解

    这篇文章我们来讲一下Java中的注解 其实这部分内容算是Javaweb的补充内容,其中还包括Junit测试和反射的相关内容。 Junit测试是一个比较简单的内容,这里就不写了;而反射的相关内容可以看java基础专栏,那里面有详细的叙述。 目录 1.注解概述 2.jdk里面已经定义的注解 2.1

    2024年02月11日
    浏览(29)
  • JavaEE进阶5/25(Spring 注解)

    1.五大类注解详解(重点 1.Controller 控制器,用于业务逻辑层,来控制用户的行为。它用来检查用户参数的有效性。 当用户的参数有效的话会继续分发到服务层。controller可以理解为程序的安保系统 2.Service 服务层。归属服务层,调用 持久化类 实现相应的功能。(服务层不直接

    2024年02月07日
    浏览(39)
  • javaee spring aop 注解实现

    2024年02月09日
    浏览(43)
  • JavaEE——SpringMVC中的常用注解

    目录 1、@RestController (1)、@Controller (2)、@ResponseBody 2、RequestMappping (1)、定义 (2)、使用 【1】、修饰方法 【2】、修饰类 【3】、指定方法类型 【4】、简化版指定方法 (3)、获取参数 【1】、传递单个/多个参数 【2】、传递对象 3、@RequestParam 4、@RequestBody 5、@PathVar

    2024年02月15日
    浏览(58)
  • 【JavaEE进阶】 Spring使用注解存储对象

    在博主前面所写的《【JavaEE进阶】 Spring 的创建和使⽤》中我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。 在 Spring 中想要更简单的存

    2024年02月05日
    浏览(42)
  • Java注解开发

    注解提供了更声明式和方便的方式,而编码方式允许更精细的控制和定制。 在Java中,当Redis充当缓存时,使用注解的方式更为常见和方便。Spring Framework提供了一种基于注解的缓存机制,称为Spring Cache。通过在方法上添加注解,开发人员可以指定缓存的行为,例如缓存的名称

    2024年02月14日
    浏览(43)
  • 14、JavaEE--Mybatis注解与Ajax技术

    目录 单表注解 @Param注解 基于注解的一对一关联查询(one) 一对多查询(many) Ajax的概念 Ajax 开发 Ajax的核心代码: Ajax五步使用法 步骤1 创建 XMLHttpRequest 对象 步骤2 指定异步提交的目标和提交方式 步骤3 指定 XMLHttpRequest对象状态改变时,需要进行的处理 步骤4 编写处理代码

    2024年02月06日
    浏览(48)
  • JavaEE——Spring中存取Bean的注解

    目录 一、存储Bean对象 1、定义 2、存储方式 (1)、类注解 【1】、@Controller(控制器存储) 【2】、@Service(服务存储) 【3】、@Repository(仓库存储) 【4】、@Component(组件存储) 【5】、@Configuration(配置存储) (2)、方法注解@Bean 3、重命名Bean 二、获取Bean对象 1、注入关

    2024年02月16日
    浏览(32)
  • [17]JAVAEE-HTTP协议

    目录 一、什么是HTTP协议 什么时候会用到HTTP协议? HTTP协议的工作流程 二、HTTP的报文格式 抓包 HTTP请求报文格式  1.首行 2.header 常见键值对: 3.空行 4.正文(body)(有的时候可以没有) HTTP响应报文格式 1.首行 常见状态码: GET和POST的区别 三、构造HTTP请求的方法 1.直接通过

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包