注解

1、Java 注解 Annotation

(1)注解基本概念

  通过对 IOC 容器和 AOP 两个核心功能的学习,大家已经体会到了 Spring 框架的强大,但是在具体应用中,需要编写配置文件 applicationContext.xml,随着项目的扩展,该配置文件也会越来越大,对它的编写和维护也较繁琐。
  为了简化对配置文件的编写,Spring 框架提供了注解功能,尤其在 SpringBoot 框架中,更加推荐使用注解来代替配置文件。使用注解后,Spring 启动时,会扫描某些包里的类,得到类或方法上的注解,并根据注解自动进行相应的操作。
  Java 注解(Annotation)又称 Java 标志,是 JDK5.0 引入的一种对类/方法/字段等进行功能扩展的机制。这些标志可以在编译、类加载或运行时被读取,并执行相应的处理,以便于其他工具补充信息或者进行部署。
  注解标注在哪里?可以在包、类、接口、字段、方法参数、局部变量等加上注解。
  注解给谁用?注解是写给程序(如编译器,Tomcat,框架)用的。它就像一个标签,贴在一个类、一个方法或者字段上。它的目的是,为当前读取该注解的程序提供判断依据。比如程序只要读到加了@Test 的方法,就知道该方法是待测试方法。

 

(2)注解的类型
(2.1) 元注解:元注解是用于定义注解的注解,由 JDK 定义
@Target:标明注解使用的范围,可用枚举值如下:
TYPE    //给类(型)注解
 FIELD    //给字段注解,不要忘了,字段可以是对象
 METHOD   //给方法注解
 PARAMETER   //给参数注解
 CONSTRUCTOR   //给构造方法注解
 LOCAL_VARIABLE //给局部变量注解
 ANNOTATION_TYPE   //给注解注解   
 PACKAGE   //给包注解
 
@Retention:标明某个注解被保留的时间长短,可用枚举值如下:
SOURCE:在源文件中有效(即源文件保留),编译成 class 文件将舍弃该注解
 CLASS(默认值):在 class 文件中有效(即 class 保留),保留在.class文件中。但是当运行 Java 程序时,它就不会继续加载了,不会保留在内存中,JVM 不会保留注解。
 RUNTIME:在运行时有效(即运行时保留)。当运行 Java 程序时,JVM会保留注释,加载在内存中了,那么程序可以通过反射获取该注释。
 
@Inherited:标明注解可继承,允许子类继承父类中的注解
 
@Documented:标明是否生成 javadoc 文档,生成说明文档,添加类的解释
 
(2.2) Java 自带的标准注解
 @Override(标明重写某个方法)
 @Deprecated(标明某个类或方法过时)
 @SuppressWarnings(标明要忽略的警告)
程序中使用这些注解后,编译器就会进行检查。
 
(2.3) 自定义注解,可以根据自己的需求定义注解,如各种框架定义的注解。
 
(3)基于注解的配置和基于 xml 的配置的区别
 xml: 是一种集中式的元数据,与源代码无绑定
 注解:是一种分散式的元数据,与源代码紧绑定
 
(4)注解实现基本步骤
 定义一个注解
 在某个类中使用注解
实现注解处理器。借助反射,获取注解对象,读取注解属性值, 然后根据注解及属性值做相应处理
 
2、Spring 框架常用注解
(1)包扫描配置
使用注解前,需要在 applicationContext.xml 文件中,配置包扫描代码:
<context:component-scan base-package="cn.java.*"/>
 
(2)Spring IOC 常用注解
 @Component(“name”)
作用:在类前加该注解,表示将该类交给 Spring 框架管理,让 Spring 框架生成该类的对象;
 @Autowired (该注解很重要)
作用:某个类的成员变量是类类型,在该成员变量前加上该注解,可以自动装配该类的实例对象类型,不需要再到 Spring 容器中取对象了;
 @Scope
作用:在类前加该注解,表示多例或单例,
 @PostConstruct:初始化注解;
 @PreDestroy:销毁注解
作用:在方法前加上这两个注解,等同于配置文件添加的 init-method 和destroy-method 功能;
 @Lazy:在类前加该注解,表示启用懒加载;
 @Value(""):在类的成员变量前加该注解,可以为对象赋初值;也可以将该注解加在某个属性的”set”方法前,为对象赋初值;
 @Aspect:指定某个类为切面类
 @Service():用于 service 层
 @Controller():用于 controller 层
 @Repository():用于 mapper 层
 
posted @   Linqylin  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示