java 注解 class_通俗易懂地讲解 Java 的注解

[ 用大白话讲解复杂的技术 ]

这是我的第41篇原创文章

作者 l 会点代码的大叔(CodeDaShu)

今天,我们来聊聊 Java 的注解。

01

注解的概念

Annotation(注解):先看看官方给出的概念,注解是 Java 提供的一种对元程序中元素关联信息和元数据的途径和方法;这种解释让人看的一脸懵,通俗一点说,可以把注解看做是对人对物的标签,比如:

凶猛的狮子,温顺的兔子,木讷的程序员,帅气的大叔;这里的“凶猛”、“温顺”、“木讷”、“帅气”就是对各个事物的标签;

注解也是一种标签,是对 Java 代码的一种标签,可以告诉程序员被注解的代码是用来做什么的;

当然标签的内容可能跟实际情况有所出入,甚至背道而驰,比如【木讷的程序员】,实际上就是一个很差的标签,所以如果你在 Contrller 层的代码添加了一个 Service 的注解,同样也是一个很差的标签。

02

元注解

元注解是注解的注解,也就是对标签的描述。比如“木讷”、“帅气”只能用在人或动物身上,那么“只能用在人或动物身上”就是对“木讷”、“帅气”这两个标签的标签;恰好元注解中就有 @Target,表示修饰对象的范围,让我们详细看一下元注解都有哪些。

@Target:表示修饰对象的范围,注解可以作用于 packages、class、interface、方法、成员变量、枚举、方法入参等等,@Target可以指明该注解可以修饰哪些内容。

@Retention:时间长短,也就是注解在什么时间范围之内有效,比如在源码中有效,在 class 文件中有效,在 Runtime 运行时有效。

@Documented:表示可以被文档化,比如可以被 javadoc 或类似的工具生成文档。

@Inherited:表示这个注解会被继承,比如 @MyAnnotation 被 @Inherited 修饰,那么当 @MyAnnotation 作用于一个 class 时,这个 class 的子类也会被 @MyAnnotation 作用。

03

内置注解

Java 中最早内置了三种注解:

@Override:检查该方法是否是重载方法;如果父类或实现的接口中,如果没有该方法,编译会报错。

@Deprecated:已经过时的方法;如果使用该方法,会有警告提醒。

@SuppressWarnings:忽略警告;比如使用了一个过时的方法会有警告提醒,可以为调用的方法增加 @SuppressWarnings 注解,这样编译器不在产生警告。

JDK 7之后,又增加了三种:

@SafeVarargs:是一个参数安全类型注解,作用是告诉开发人员,参数可能会存在不安全的操作,要多注意一些;它会产生一个 unchecked 的警告;@SafeVarargs 注解只能用在可变长度参数的方法上,并且这个方法必须是 static 或 final 的,否则会出现编译错误。

@FunctionalInterface:表示是只有一个方法的接口,JDK 8 引入。

@Repeatable:表示注解的值可以有多个,比如我又帅气又幽默,这时候我同时有了“帅气”和“幽默”两个标签。

04

注解的使用场景

注解可以让编译器探测错误和警告;编译阶段可以利用注解生成文档、代码或做其他的处理;在代码运行阶段,一些注解还可以帮助完成代码提取之类的工作。

比如,使用过 Spring 框架的同学应该对 @Autowired 很熟悉了。使用 Spring 开发时,进行配置可以用 xml 配置文件的方式,现在用的更多的就是注解的方式。@Autowired 可以帮助我们注入一个定义好的 Bean。

@Autowired 的核心代码大概是这样的,作用就是 Spring 可以提取到使用 @Autowired 修饰的字段或方法做注入:

期待分享

如果您喜欢本文,请点个“在看”或分享到朋友圈,这将是对我最大的鼓励。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring AOP(面向切面编程)是 Spring 框架中的一个核心概念,它允许我们在方法执行的前、后或抛出异常时插入额外的逻辑,以实现横切关注点的功能。简单来说,AOP 可以在不修改原始代码的情况下,将额外的功能模块与程序的核心逻辑分离开来,提高了代码的可维护性和可复用性。 在 Spring AOP 的实现过程中,我们需要定义切面类,并为需要实现 AOP 的方法添加注解。Spring 框架会在运行时根据这些注解,自动将切面逻辑插入到方法中,从而实现 AOP 的功能。切面类中的方法,被称为通知(advice),它定义了在方法执行的前、后或抛出异常时需要执行的逻辑。Spring AOP 提供了以下几种通知类型: 1. 前置通知(Before advice):在目标方法执行之前执行的逻辑。 2. 后置通知(After returning advice):在目标方法成功执行后执行的逻辑。 3. 异常通知(After throwing advice):在目标方法抛出异常后执行的逻辑。 4. 最终通知(After advice):在目标方法执行完毕后无论是否抛出异常都执行的逻辑。 5. 环绕通知(Around advice):在目标方法执行的前后都可以执行的逻辑。 通过使用这些通知,我们可以将不同的功能模块以切面的形式插入到目标方法中,实现对方法的增强和控制。这样,我们就可以将一些共性的操作(如日志记录、事务管理等)从核心逻辑中分离出来,提高了代码的可维护性和可复用性。 总结起来,Spring AOP 的原理就是通过在运行时动态生成代理对象,将切面逻辑织入到目标方法中,实现对方法的增强和控制。这种方式可以在不修改原始代码的情况下,实现横切关注点的功能,提高了代码的可维护性和可复用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Spring 之 AOP 原理详解](https://blog.csdn.net/wizard_hu/article/details/130123613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Spring AOP概念理解](https://blog.csdn.net/zzpitheilang/article/details/83634727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值