废话不多说直接上菜:
定义接口和实现类
package com.lixiang.proxy;
/**
* @author lixiang
* @date 2018年11月14日 - 15:39
* @history 2018年11月14日 - 15:39 lixiang create.
*/
public interface UserService {
void getName(String name);
}
package com.lixiang.proxy;
/**
* @author lixiang
* @date 2018年11月14日 - 15:39
* @history 2018年11月14日 - 15:39 lixiang create.
*/
public class UserServiceImpl implements UserService {
@Override
public void getName(String name) {
System.out.println("被代理者的原来业务逻辑=====" + name);
}
}
代理实现
package com.lixiang.proxy;
import java.lang.reflect.Proxy;
/**
* @author lixiang
* @date 2018年11月14日 - 15:39
* @history 2018年11月14日 - 15:39 lixiang create.
*/
public class ProxyDemo {
@SuppressWarnings("unchecked")
public <T> T bind(T t) {
return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), t.getClass().getInterfaces(),
(proxy, method, args) -> {
System.out.println("===代理前===");
// 回掉被代理对象
Object result = method.invoke(t, args);
System.out.println("===代理后===");
return result;
});
}
}
Main方法
package com.lixiang.proxy;
/**
* @author lixiang
* @date 2018年11月14日 - 15:39
* @history 2018年11月14日 - 15:39 lixiang create.
*/
public class TestMain {
public static void main(String[] args) {
ProxyDemo proxyDemo = new ProxyDemo();
IUserService userService = proxyDemo.bind(new UserServiceImpl());
userService.getName("lixiang");
}
}
执行结果
===代理前===
被代理者的原来业务逻辑=====lixiang
===代理后===
如果有错误或不完善的地方还请不吝赐教!!!