定义包注解
@Target(ElementType.PACKAGE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PkgAnnotation {
String value() default "";
}
定义package-info.java
// 1-提供包的整体注释说明
/**
* <b>package-info不是平常类,其作用有三个</b> <br>
* 1. 为标注在包上Annotation提供便利 <br>
* 2. 声明友好类和包常量 <br>
* 3. 提供包的整体注释说明(描述和记录本包信息) <br>
* */
// 2-为标注在包上Annotation提供便利
@PkgAnnotation("package controller")
package com.jaemon.sdk.contorller;
import com.jaemon.sdk.annotation.PkgAnnotation;
// 3-声明包的私有常量
// 包常量,只运行包内访问,适用于分“包”开发
class PkgConst {
final static String PREFIX = "pkg";
}
// 4-声明包的私有类
// 包类,声明一个包使用的公共类,强调的是包访问权限
class PkgClass {
void say() {
System.out.println("hello java.");
}
}
使用案例
package com.jaemon.sdk.contorller;
import com.jaemon.sdk.annotation.PkgAnnotation;
import java.lang.annotation.Annotation;
public class AppController extends PkgClass {
public static void main(String[] args) {
System.out.println(PkgConst.PREFIX);
System.out.println();
AppController appController = new AppController();
appController.say();
System.out.println();
// 可以通过I/O操作或配置项获得包名
String pkgName = "com.jaemon.sdk.contorller";
Package pkg = Package.getPackage(pkgName);
System.out.println(pkg.getName());
System.out.println();
PkgAnnotation declaredAnnotation = pkg.getDeclaredAnnotation(PkgAnnotation.class);
System.out.println(declaredAnnotation.value());
System.out.println();
// 获得包上的注解
Annotation[] annotations = pkg.getAnnotations();
// 遍历注解数组
for (Annotation annotation : annotations) {
if(annotation instanceof PkgAnnotation){
PkgAnnotation pkgAnnotation = (PkgAnnotation) annotation;
System.out.println(pkgAnnotation.value());
}
}
}
}
运行输出
pkg
hello java.
com.jaemon.sdk.contorller
package controller
package controller