spring boot

public class DynamicProxy implements InvocationHandler
{
    // 要代理的对象
    private Object target;

    // 将构造方法禁用掉,不让外部通过new来得到DynamicProxy对象
    private DynamicProxy()
    {
    };

    /**
     * 返回一个动态的代理对象
     * 
     * @param object
     * @return
     */
    public static Object newInstance(Object object)
    {
        DynamicProxy proxy = new DynamicProxy();
        proxy.target = object;
        //    通过Proxy的newProxyInstance方法来得到一个代理对象
        Object result = Proxy.newProxyInstance(object.getClass()
                .getClassLoader(), object.getClass().getInterfaces(), proxy);
        return result;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable
    {
//        //    只有方法名为add和delete时候才引入日志
//        if(method.getName().equals("add") || method.getName().equals("delete"))
//        {
//            Logger.logInfo("动态代理类");
//        }
        
        // 根据LogAnnotation来判断,如果被标注了注解,则输出日志
        if(method.isAnnotationPresent(LogAnnotation.class))
        {
            LogAnnotation log = method.getAnnotation(LogAnnotation.class);
            Logger.logInfo(log.value());
        }
        
        Object object = method.invoke(target, args);
        return object;
    }
}

posted on 2016-03-11 15:26  快跑的小鸡  阅读(130)  评论(0)    收藏  举报

导航