注解及Spring系列注解

目录

一、注解

1、概念

2、Java注解

2.1、@Override

2.2、@Deprecated

2.3、@SuppressWarnings

3、元注解

3.1、@Retention

3. 2、@Documented

3.3、@Inherited 

3.4、@Target 

 4、自定义注解

二、Spring系列注解使用

1、Spring IOC、DI 注解使用

1.1. Spring IOC、DI 概念

1.2、使用方法:

1)@Component+@Autowired

2、 Spring MVC 注解使用

2.1、概念

2.2、 Spring MVC注解在RuoYi-Vue中的使用 

3. SpringBoot 注解使用

3.1.@SpringBootApplication

​三、总结 


一、注解

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方法的主配置类。

三、总结 

注解为代码提供元数据,用于标记、约束、文档化和框架集成,可被编译器或运行时处理。熟练运用注解,可以提高开发的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值