最近在研读java设计模式,看到其工厂模式实现类,通过switch case 不同的类型返回不同的处理方式类(这种写法每次新增一个工厂类都要修改case),突然萌生一个想法,能不能通过注解的方式来这个方式,以下就是我来实现的demo,有什么问题大家可以留言指出。
依赖jar
org.reflections
reflections
0.9.11
自定义注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface TestAnnotat {
String des() default "用于测试";
}
多个处理类实现
public interface FunHandler {
void handle(String name);
}
@TestAnnotat(des = "数据测试")
public class DataHandler implements FunHandler {
public void handle(String name){
System.out.println("数据 name = " + name);
}
}
@TestAnnotat(des = "消息测试")
public class MsgHandler implements FunHandler {
public void handle(String name){
System.out.println("消息 name = " + name);
}
}
注:需要扫描的处理类都放在一个包下,方便扫描
反射扫描各实现方法
String pkg = FunHandler.class.getPackage().getName(); // 获取需要扫描的包名
System.out.println("pkg = " + pkg);
Reflections f = new Reflections(pkg);
Set> set = f.getTypesAnnotatedWith(TestAnnotat.class);
for (Class> c : set) {
Object bean = c.newInstance();
TestAnnotat annotation = c.getAnnotation(TestAnnotat.class);
System.out.println("annotation.des() = " + annotation.des());
FunHandler funHandler = (FunHandler)bean;
funHandler.handle("test");
}