目录
2.2、 Spring MVC注解在RuoYi-Vue中的使用
一、注解
1、概念
注解(Annotation)是计算机编程中的一个概念,它用于为代码提供元数据。在不同的编程语言和上下文中,注解的具体含义和用途可能有所不同,但以下是一些常见的用途和特点:
1、代码标记:注解可以用来标记代码,以提供额外的信息,这些信息可以在编译时、类加载时或运行时被读取和处理。
2、编译时处理:一些注解只在编译时起作用,它们可以被编译器用来生成额外的代码或进行代码检查。
3、运行时处理:另一些注解在运行时起作用,它们可以被框架或库读取,以改变程序的行为。
4、代码文档化:注解可以用来提供代码的额外文档,比如方法的参数说明、作者信息等。
5、代码约束:注解可以用于定义代码的约束条件,比如线程安全、事务管理等。
6、框架集成:在某些框架中,注解用于配置框架的行为,如Spring框架中的@Autowired和@Service注解。
7、代码分析工具:注解可以被代码分析工具用来识别代码模式和潜在的问题。
8、代码生成:注解可以用于指导代码生成工具,自动生成模板化的代码。
2、Java注解
2.1、@Override
它的作用是对覆盖超类中方法的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告。
public interface Test {
public String getStr();
}
class TestImpl implements Test{
// 假如返回参数和方法参数其中一个不一致,就会警告
@Override
public String getStr() {
return null;
}
}
2.2、@Deprecated
表示某个元素(类、方法等)已经过时,方法上面有横线,使用有警告
/**
* 测试Deprecated注解
* @author Administrator
*/
public class DeprecatedDemoTest {
public static void main(String[]args) {
// 使用DeprecatedClass里声明被过时的方法
DeprecatedClass.DeprecatedMethod();
}
}
class DeprecatedClass {
@Deprecated
public static void DeprecatedMethod() {
}
}
2.3、@SuppressWarnings
@SuppressWarnings注解主要用在取消一些编译器产生的警告,警告对于运行代码实际上并没有影响,但是出于部分程序员具有洁癖的嗜好,通常会采用@SuppressWarnings来消除警告。

3、元注解
描述数据的数据都是元数据,描述注解的注解都是元注解,这些注解智能用在修饰注解上,不能使用在其他地方,比如方法、类等等
3.1、@Retention
注解按生命周期来划分可分为3类:
- RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;也就是编译时有效。
- RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;加载时被抛弃。
- RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;一直有效!
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
// 定义自定义注解
//元注解 指定了 MyRuntimeAnnotation 注解的生命周期为 RUNTIME,
// 即注解会在运行时保留,并可以通过反射访问。
@Retention(RetentionPolicy.RUNTIME)
// 定义了一个名为 MyRuntimeAnnotation 的自定义注解。
public @interface MyRuntimeAnnotation {
// 定义了注解的一个元素,名为 value,类型为 String。
String value();
}
//定义并使用自定义注解
// 在 MyClass 类上使用 MyRuntimeAnnotation 注解,
// 并传递 value 元素的值为 "Hello, Runtime!"。
@MyRuntimeAnnotation(value = "Hello, Runtime!")
// 公共类 MyClass
public class MyClass {
public static void main(String[] args) {
Class<MyClass> clazz = MyClass.class;
// 检查 MyClass 类是否被 MyRuntimeAnnotation 注解标记。
if (clazz.isAnnotationPresent(MyRuntimeAnnotation.class)) {
MyRuntimeAnnotation annotation = clazz.getAnnotation(MyRuntimeAnnotation.class);
// 调用 annotation 实例的 value 方法,获取并输出注解的值。
System.out.println(annotation.value()); // 输出: Hello, Runtime!
}
}
}
3. 2、@Documented
@Deprecated注解基本上所有框架自定义的注解都会添加,指定注解是否包含在生成的文档中
@Documented
public @interface DocumentedMy {
String value() default "这是一个自定义类";
}
@DocumentedMy
public class MyTest1 {
public String getStr() {
return "123";
}
}
3.3、@Inherited
如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解。
import java.lang.annotation.Inherited;
@Inherited // 指定 MyInheritedAnnotation 注解可以被子类继承
public @interface MyInheritedAnnotation { // 定义一个名为 MyInheritedAnnotation 的自定义注解
String value(); // 定义注解的一个元素,名为 value,类型为 String
}
// 在 ParentClass 类上使用 MyInheritedAnnotation 注解,并传递 value 元素的值为 "Parent Annotation"
@MyInheritedAnnotation(value = "Parent Annotation")
public class ParentClass {
// 父类逻辑
}
public class ChildClass extends ParentClass {
// 子类逻辑
}
public class Main {
public static void main(String[] args) {
Class<ChildClass> clazz = ChildClass.class;
// 检查 ChildClass 类是否被 MyInheritedAnnotation 注解标记
if (clazz.isAnnotationPresent(MyInheritedAnnotation.class)) {
// 获取 ChildClass 类上的 MyInheritedAnnotation 注解实例
MyInheritedAnnotation annotation = clazz.getAnnotation(MyInheritedAnnotation.class);
// 调用 annotation 实例的 value 方法,获取并输出注解的值
System.out.println(annotation.value());
}
}
}
3.4、@Target
@Target只能用在注解上,指定修饰的注解的使用范围
- @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) —— 包
import java.lang.annotation.Target; // 导入 Target 元注解
import java.lang.annotation.ElementType; // 导入 ElementType 枚举
@Target({ ElementType.METHOD, ElementType.FIELD }) // 指定 MyTargetAnnotation 注解可以应用于方法和字段
public @interface MyTargetAnnotation { // 定义一个名为 MyTargetAnnotation 的自定义注解
String value(); // 定义注解的一个元素,名为 value,类型为 String
}
public class MyClass { // 定义一个名为 MyClass 的公共类
@MyTargetAnnotation(value = "Field Annotation") // 在 myField 字段上使用 MyTargetAnnotation 注解,并传递 value 元素的值为 "Field Annotation"
private String myField; // 定义一个私有的字符串字段 myField
@MyTargetAnnotation(value = "Method Annotation") // 在 myMethod 方法上使用 MyTargetAnnotation 注解,并传递 value 元素的值为 "Method Annotation"
public void myMethod() { // 定义一个公共方法 myMethod
// 方法逻辑
}
}
4、自定义注解
1.定义:使用@interface
2.定义属性:类名+名字()
3.赋默认值:default + 默认值
4.修饰:使用需要的元注解

二、Spring系列注解使用
1、Spring IOC、DI 注解使用
1.1. Spring IOC、DI 概念

•IOC:Inverse Of Control
•原来:要完成一个逻辑,A 要调用[依赖]B ,创建对象B 的动作会放在A 里面
•现在:创建B 转交给框架做。创建B 的控制权被外部控制了,而不是A 自己,叫做控制反转
•DI:Dependency Inject
•框架创建好的对象B 需要给回A 进行使用,就叫做依赖注入
1.2、使用方法:
使用方法:@Component+@Autowired、{@Configuration+@Bean}+@Resource
1)@Component+@Autowired
- [IOC]注册Bean 到Spring 容器:@Component
@Component 将该类标记为一个组件,Spring会自动扫描该类,并将其实例化为一个Bean,可在其他地方通过依赖注入的方式使用

- [DI]在CaptchaController 类中注入Bean:@Autowired
@Autowired 是Spring对组件自动装配的一种方式。用于在一个组件中引入其他组件
默认按照类型装配Bean,需要用到名称装配时需要添加@Qualifier注解指定name属性告诉容器加载哪个Bean

- 使用成员变量

2)@Configuration+@Bean)+@Resource
- 注册Bean,指定name并装配到Spring容器中:@Configuration+@Bean
@Configuration 注解加在类上相当于让类的功能等同于一个bean.xml配置文件。
@Bean 类似于bean.xml配置文件中的bean元素,在spring容器中注册一个bean。用在方法上的@Bean表示通过方法来定义一个Bean,通过name可指定注入到容器中的对象id(默认是方法名)。


- 在CaptchaController类中注入Bean:@Resource
@Resource 装配Bean。默认按照名字装配Bean,即按照name属性的值找到具有相同id的Bean并注入。如果没有name属性,则根据被注入的属性的名字进行Bean装配

- 使用成员变量

2、 Spring MVC 注解使用
2.1、概念
常用注解
- @Controller/@RequestMapping/@RequestBody/@ResponseBody
- @RestController/@GetMapping/@PostMapping/@PutMapping/@DeleteMapping
- @Service
注册Controller[也是一种Bean]
- @Controller [每次前端请求返回的一个页面]
- @RequestBody[请求体为json]
- @ResponseBody[返回值为json]
- @RestController [每次前端请求返回的一个json,等效于@Controller+@ResponseBody]
注册HTTP Method 处理函数
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
注册Service[也是一种Bean]
- @Service
2.2、 Spring MVC注解在RuoYi-Vue中的使用

- 注册Controller

- 注册处理函数
使用ControllerCaptchaController
•Spring MVC 框架会在HTTP 请求到来时,寻找匹配URI 映射处理函数
使用Controller
Spring MVC 框架会在前端发送HTTP 请求时,寻找匹配URI 映射处理函数
3. SpringBoot 注解使用
3.1.@SpringBootApplication
@SpringBootApplication:核心注解。表明是个启动类注解。其中 DataSourceAutoConfiguration.class默认会自动配置但数据源,通过exclude 属性是为了排除自动注入数据源配置,使用多数据源进行配置
SpringApplication.run()方法:启动Spring运行环境。在对象初始化时保存事务监听器,容器初始化、创建、加载,web应用的判断,保存包含main方法的主配置类。
三、总结
注解为代码提供元数据,用于标记、约束、文档化和框架集成,可被编译器或运行时处理。熟练运用注解,可以提高开发的效率

485

被折叠的 条评论
为什么被折叠?



