需求:利用自定义注解实现代理类生成时,按照注解获取被代理类
消息接口和两个实现类:
interface IMessage{
void send();
}
class MessageImpl1 implements IMessage {
@Override
public void send(){
System.out.println("发送消息1");
}
}
class MessageImpl2 implements IMessage {
@Override
public void send(){
System.out.println("发送消息2");
}
}
自定义注解:
//注解在运行时生效
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
//clazz参数是class对象
public Class<?> clazz();
}
工厂类:
class Factory {
//工厂类入参为class对象,由于生成实际被代理对象,利用java的动态代理模式来生成代理对象
public static <T> T getInstance (Class<T> clzz)throws Exception{
T target = clzz.getDeclaredConstructor().newInstance();
return (T)Proxy.newProxyInstance(target.getClass().getClassLoader(),