Java 注解(Annotation)本质上是一种元数据(metadata),它本身对代码逻辑没有直接影响,但可以被编译器、开发工具或运行时框架读取并利用,从而改变程序的编译方式或运行行为。
简单来说:注解是“给代码加标签”,让别人(编译器/框架/JVM)看懂并做相应处理。
用于让编译器进行语法或逻辑检查。
常见例子:
@Override
@Deprecated
@SuppressWarnings("unchecked")
作用:
@Override:检查方法是否真的重写了父类方法@Deprecated:标记方法已过时@SuppressWarnings:抑制编译器警告✅ 作用阶段:编译期
注解可以在编译时生成代码或配置文件,减少重复劳动。
典型应用:
@Data、@Getter、@BuilderBuilder、equals、hashCode示例:
@Data
public class User {
private String name;
}
编译后自动生成 getter/setter。
✅ 作用阶段:编译期(注解处理器)
运行时通过反射读取注解,控制程序行为。
典型框架:
@Controller、@Service、@Autowired@Test@Entity、@Table、@Id示例(Spring):
@Service
public class UserService {}
Spring 启动时扫描注解,自动创建对象。
✅ 作用阶段:运行期
注解让配置更直观,减少 XML。
以前:
<bean id="userService" class="com.xxx.UserService"/>
现在:
@Service
public class UserService {}
你可以定义自己的注解,实现特定逻辑。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {}
结合 AOP 使用:
@Log
public void save() {}
可用于:
| 生命周期 | 说明 |
|---|---|
| SOURCE | 仅存在于源码,编译后消失 |
| CLASS | 存在于 .class 文件,运行时不可见 |
| RUNTIME | 运行时可通过反射读取(最常用) |
Java 注解的作用:
用“标签”的方式,把“配置”和“行为”绑定到代码上,让编译器或框架自动完成工作。
如果你愿意,我也可以:
你想从哪一块深入?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。