package cn.dreampie.orm.aspect;
import cn.dreampie.common.util.Joiner;
import cn.dreampie.log.Logger;
import java.lang.reflect.Proxy;
/**
* Created by wangrenhui on 15/1/2.
* 代理工厂类
*/
public class AspectFactory {
private static final Logger logger = Logger.getLogger(AspectFactory.class);
/**
* 私有构造方法
*/
private AspectFactory() {
}
/**
* 工厂方法
*
* @param target 代理目标对象
* @param aspects 切面集合
*/
public static <T> T newInstance(T target, Aspect... aspects) {
AspectHandler hander = new AspectHandler(target, aspects);
Class clazz = target.getClass();
if (logger.isDebugEnabled()) {
logger.debug("Instance of " + clazz + ", " + Joiner.on(",").useForNull("null").join(clazz.getInterfaces()));
}
return (T) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), hander);
}
}