注解的创建
注解的使用方式
方式一 优化代码结构,抽离属性配置到子类
说明:
通过注解可以很好的优化代码结构,常见的,我们可以通过使用AOP切面优化代码结构,使得代码结构进行解耦将一些重复的非业务型的代码进行拆解,使得代码编写专注于代码的业务逻辑,这
知识点:
- 对象本身可以访问类对象
- 通过类对象可以获取类注解
- 子类实例化时,父类的构造方法会被调用
package com.wzk.annotion;
import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)//执行时注解
@Documented
public @interface BeanInfo {
/**
* @return 类表述
*/
String value();
}
package com.wzk.annotion;
/**
* @ClassDescription: com.wzk.annotion.BaseBean
* @Content: 基础类,需要子类实现
* @Author: wang.zuokuan
* @Since: 2021/8/3 11:21
*/
public abstract class BaseBean {
/**
* 类表述
* 因为是final类型,所以必须进行初始化,我们可以将初始化的过程降级到构造方法执行时候,或则构造方法执行以前
*/
protected static final String[] classDesc = new String[1];
{
System.out.println("A-内部自身匿名类");
if (classDesc[0] == null || classDesc[0].equals("")){
synchronized (BaseBean.class){
Class<?> clazz = getClass();
if (classDesc[0] == null || classDesc[0].equals("")) {
BeanInfo declaredAnnotation = clazz.getDeclaredAnnotation(BeanInfo.class);
classDesc[0] = declaredAnnotation.value();
System.out.println("B-初始化classDesc的值");
}
}
}
}
/**
* 初始化时候,加载bean的信息
*/
protected BaseBean() {
System.out.println("C-构造函数");
}
public String getClassDesc() {
return classDesc[0];
}
}
package com.wzk.annotion;
@BeanInfo("这是一个学生类")
public class Student extends BaseBean {
public Student() {
System.out.println("D-Student 构造函数");
}
public static void main(String[] args) {
Student student = new Student();
Student student2 = new Student();
String classDesc = student.getClassDesc();
System.out.println(classDesc);
}
}
结果打印
A-内部自身匿名类
B-初始化classDesc的值
C-构造函数
D-Student 构造函数
A-内部自身匿名类
C-构造函数
D-Student 构造函数
这是一个学生类