import lombok.Data;
@Data
public class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
}
public interface IUser {
public void addUser(User u);
}
public class UserImpl implements IUser{
@Override
public void addUser(User u) {
System.out.println("新增用户:"+u.getName());
}
}
import lombok.Data;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//jdk 原生的动态代理
@Data
public class UserIntercepter implements InvocationHandler {
public Object realobje;
public UserIntercepter(Object realobje) {
super();
this.realobje = realobje;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if(args !=null &&args.length>0&& args[0] instanceof User){
User u = (User)args[0];
if(u.getName().length()<3){
System.out.println("----------------------");
System.out.println("用户名长度小于3");
throw new RuntimeException("用户名长度小于3");
}
}
Object ob = method.invoke(realobje,args);
return ob;
}
}
import java.lang.reflect.Proxy;
public class TestJdk {
public static void main(String[] args) {
//需要使用 Proxy和 InvocationHandler 一起使用
User u = new User("lh");
IUser udao = new UserImpl();
UserIntercepter inte = new UserIntercepter(udao);
//无侵入进行代码增强 代理 集成接口 实现类也要实现接口
IUser userproxy = (IUser) Proxy.newProxyInstance(
udao.getClass().getClassLoader(),udao.getClass().getInterfaces(),inte);
userproxy.addUser(u);
System.out.println("*********************");
System.out.println(userproxy.hashCode());
}
}