com.jquicker.context.bean.ProxyFactory Maven / Gradle / Ivy
package com.jquicker.context.bean;
import java.lang.reflect.Proxy;
import com.jquicker.aop.Advice;
/**
* @author OL
*/
public class ProxyFactory {
/**
* 注意:用父类接收其子类的代理对象会抛ClassCastException
* 用接口接收其实现类人代理对象则可行
* @param target
* @param advice
* @return
* @author OL
*/
@SuppressWarnings("unchecked")
public static T newProxyInstance(Object target, Advice advice) {
return (T) Proxy.newProxyInstance(ProxyFactory.class.getClassLoader(),
target.getClass().getInterfaces(), advice);
}
@SuppressWarnings("unchecked")
public static T newProxyInstance(Class>[] interfaces, Advice advice) {
/**
* loader: 一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载
* interfaces: 一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了
* h: 一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上
*/
return (T) Proxy.newProxyInstance(ProxyFactory.class.getClassLoader(), interfaces, advice);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy