怎么使用呢?
例子:先利用反射,获取到注解,而后把利用注解实例化该类的对象
下面有一个例子:(本身写的哦)
定义一个注解java
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitProvider { /*供应商编号*/ public int id() default -1; /*供应商名称*/ public String name() default ""; /*供应商地址*/ public String address() default ""; }
对一个类使用注解程序员
@FruitProvider(id = 1728, name = "why", address = "shenzhen") public class Apple { private int appleID; private String appleProvidername; private String appleprovideraddress; public int getAppleID() { return appleID; } public void setAppleID(int appleID) { this.appleID = appleID; } public String getAppleProvidername() { return appleProvidername; } public void setAppleProvidername(String appleProvidername) { this.appleProvidername = appleProvidername; } public String getAppleprovideraddress() { return appleprovideraddress; } public void setAppleprovideraddress(String appleprovideraddress) { this.appleprovideraddress = appleprovideraddress; } }
注解处理器架构
public class FruitInfoUtil { public static Apple getAApple(Class<?> clazz) throws Exception{ FruitProvider fb = clazz.getAnnotation(FruitProvider.class);//经过反射获取处理注释 //经过newInstance()生成Apple实例,利用反射的结果进行设置 Apple ap = (Apple)clazz.newInstance(); ap.setAppleID(fb.id()); ap.setAppleProvidername(fb.name()); ap.setAppleprovideraddress(fb.address()); return ap; } }
public class Main { public static void main(String[] args) throws Exception{ Apple a = FruitInfoUtil.getAApple(Apple.class); System.out.println("苹果商的ID为:"+a.getAppleID()); System.out.println("苹果商的名字为:"+a.getAppleProvidername()); System.out.println("苹果商的地址为:"+a.getAppleprovideraddress()); } }
这个实例就很好的说明,如今的框架不少都使用了这种方式来减小配置文件的数量。(由于配置就在代码里面了)。app
部分来源:简书[ALEXIRC]框架