1.要代理的类一定要有接口
interface Userservice {
void select();
void update();
}
class UserServiceImpl implements Userservice{
//方法返回值类型我就不写的了
@Override
public void select() {
System.out.println("查询");
}
@Override
public void update() {
System.out.println("更新");
}
}
2.通过动态代理增加UserServiceImpl中方法的功能:自定义一个handler类,实现ivocationHandler实现invoke功能即可
class UserHandler implements InvocationHandler {
Object target; //要代理的类
public UserHandler(Object target) {
this.target = target; //通过构造函数把要代理的类注入进来
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("前面增加功能1");
Object result = method.invoke(target, args); //调用方法
System.out.println("后面增加功能2");
return result;
}
}
3.测试
public class test{
public static void main(String[] args) {
Userservice userService = new UserServiceImpl();
ClassLoader classLoader = userService.getClass().getClassLoader();
Class<?>[] interfaces = userService.getClass().getInterfaces();
UserHandler userHandler = new UserHandler(userService);
Userservice proxyInstance = (Userservice) Proxy.newProxyInstance(classLoader, interfaces, userHandler); //三个参数
proxyInstance.update();
proxyInstance.select();
}
}
4.结果
前面增加功能1
更新
后面增加功能2
前面增加功能1
查询
后面增加功能2