马上要上手做项目了。以前都是之间导入搭好、配置好的框架直接写CRUD;但是今天在尝试手动搭建框架,进行配置信息的时候,发现如何将配置信息抽取出来,提高维护性这一操作既陌生有觉得重要,于是今天要来好好学习使用Spring中配置类的使用!
自定义注解
注解类语法:(注解生命与注解类实现)
- 注解类的声明部分:自定义注解类,在创建时,自动继承java.lang.annotation.Annotation接口;
public @interface test1 {
}
- 注解类的实现部分:不能想其他类一样书写构造;方法;属性。只能定义一个叫注解定义元素的东西。
定义注解元素需注意:
- 修饰符必须为public,不写默认为public;
- 元素的类型只能是基本数据类型:String、Class、枚举类型(被enum 修饰的类)、注解类型(体现了注解的嵌套效果)以及上述类型的一位数组;
- 元素的名称一般定义为名词,如果注解中只有一个元素,请把名字起为value(后面使用会带来便利操作)
- ()内不定义参数,这只是个固定语法
- defalt代表的是默认值;
- 如果没有默认值,后续使用注解时必须给其赋值
这里大家肯定挺奇怪的,既像是定义属性值(要么给默认属性值、要么后续使用时赋上),又像定义方法因为其打了"()"。
public @interface test1 {
public String name();
int age() default 18;
int[] array();
}
元注解(修饰注解的注解)
注解是专门修饰注解的注解
@target
作用:限定被修饰注解应用到哪些JAVA元素上面。
该注解实现如下
public @interface Target {
ElementType[] value();
}
注解定义的元素是枚举类型 详细定义如下:
public enum ElementType {
/***/
/** 类,接口(包括注解类型)或枚举的声明 */
TYPE,
/** 属性的声明 */
FIELD,
/** 方法的声明 */
METHOD,
/** 方法形式参数声明 */
PARAMETER,
/** 构造方法的声明 */
CONSTRUCTOR,
/** 局部变量声明 */
LOCAL_VARIABLE,
/** 注解类型声明 */
ANNOTATION_TYPE,
/** 包的声明 */
PACKAGE
TYPE_PARAMETER,
TYPE_USE,
MODULE;
private ElementType() {
}
}
使用:比如让我们的注解使用在类、接口 和 方法上面;
@Retention
定义注解在java哪个阶段可以被使用:
- Java源文件阶段source:在编译和运行期间不起任何作用,等同于注解
注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为)-- 次注解江北编译器忽略掉- 编译到class文件阶段class:编译过程中起作用;运行时JVM会忽略他。
注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为)- 运行期阶段RUNTIME:用的最多 定义为(value = {RetentionPolicy.RUNTIME})
注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到
后面两个我觉得不重要了:
@Documented
@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。
@Inherited
@Inherited注解,是指定某个自定义注解如果写在了父类的声明部分,那么子类的声明部分也能自动拥有该注解。@Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。
使用自定义注解
public class ZhouHuer {
@test1(name = "周胡", array ={1,2,3} )
public void study(int times){
for(int i =0; i<times;i++){
System.out.println("Good good Study day day up"+i);
}
}
}
在使用时要给注解元素进行赋值;如果注解元素只有一个注解类型元素,而且命名为value,使用时省略value=这一过程
public @interface SecondAnnotation {
String value();
}
//等效于@ SecondAnnotation(value = "this is second annotation")
@SecondAnnotation("this is annotation")
public class JavaBean{
//省略实现部分
}
自定义扩展信息(实操)
目的:我们通过使用注解,反射,将配置文件中的属性赋值给类中变量;
读取yaml文件
我们的yaml文件格式为
server:
port: 8081
首先配置绑定
总结
后面需要好好理解下枚举类型的使用
非常感谢一下几片文章的帮助:
- https://blog.csdn.net/xsp_happyboy/article/details/80987484跳转