从自定义注解到手写elasticjob启动类

2021-05-14  本文已影响0人  想回家种地的程序员

01 任务点

  1. 了解常见注解

  2. 认识自定义注解

  3. 手写分布式任务调度(elasticjob启动类)

4 .@SpringBootApplication自动装载对象流程

备注
想要更好了解注解,请查看开源源码https://gitee.com/flowerAndJava/annotation-learn

02 介绍

看着代码学习注解!

代码

getting-started模块 com.haopt.annotation.definition包 自定义注解代码

getting-started模块 com.haopt.annotation.meta 元注解对自定义注解修饰

springboot模块,springboot项目开发中常用的依赖

elasticjob-springboot-starter模块,自定义elastic-job启动动类,用于springboot集成。

elasticjob-test模块,用于测试分布式调度。

知识点

下方文档

03 自定义注解

1. 概述
注解是对程序进行标注和解释。给编译器看。使代码更加简洁。

2. 常见注解
@Override 重写父类方法
@Deprecated 用于方法上,表示方法已经过期

3. 自定义注解(看代码理解)
public @interface 注解名称 {
public 属性类型 属性名() default 默认值 ;
}
备注
属性类型
基本数据类型、String、class、注解、枚举、以上类型一维数组。
属性没有默认值,必须手动赋值。

4. 元注解
描述注解的注解

5. 常用的元注解(详细查看代码)
@Target 指定注解在哪使用
@Retention 注解生存时间
@Inherited 自定义注解是否可以被子类继承

04 SpringBoot中常用的注解

1. 获取配置文件中的属性(详细使用看代码。springboot模块 com.haopt.annotation.obtain包)
@value、@ConfigurationProperties(prefix = "data")、@Configuration+@Bean,用来获取配置文件中属性

2. 条件注解
@Conditional(Class<? extends Condition>) 根据继承Condition类的matches方法返回true创建对象
@ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean
@ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean
@ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean

3. enable开头注解(自定义注解)
底层会依赖@Import,@Import注解加载类,这些类会被Spring创建,并放到容器中。

备注:
SpringBoot项目启动类的@SpringBootApplication含有@ComponentScan注解,@ComponentScan注解只会扫描本包下和子包下注解。

所以当导入另外一个项目依赖,并不能将bean对象加入到IOC容器中。

4. @Import(类名.class)提供四种导入方法
导入bean
导入配置类: 可以将配置类中@Bean导入到Spring IOC容器中。
导入ImportSelector实现类: 将返回值全类名数据全部导入到IOC容器中。
导入ImportBeanDefinitionRegistrar实现类: 在实现方法将类导入到IOC容器中。

5. SpringBoot自动装配对象
@SpringBootApplication -> @EnableAutoConfiguration -> @Import({AutoConfigurationImportSelector.class}) -> selectImports(AnnotationMetadata annotationMetadata) -> getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) -> META-INF/spring.factories(配置文件) -> 加载配置文件中的类

上一篇 下一篇

猜你喜欢

热点阅读