jdk动态代理代码jdk动态代理
自己在研究SpringAop的时候,其最基本的核心是动态代理,也可以说是Aop是动态代理的一种实现方式。
下面自己做了个测试,依据的是jdk,在Eclipse上可以运行。
需求:当用户的权限不为null时,才会访问接口里面的方法。
一 、定义接口类-----jdk的动态代理是依据接口实现的
public interface PersonServicw {
public void save(String s);
public void update(String name, Integer password);
public String getPersonMan(Integer personId);
}
二、定义接口实现类---也就是常说的目标类(被代理的类)
public class PerSonServiceImpl implements PersonServicw {
private String user = null;
public PerSonServiceImpl(String user) {
this.user = user;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public PerSonServiceImpl() {
}
public String getPersonMan(Integer personId) {
return "xxx";
}
public void save(String s) {
System.out.println("我是save()方法");
}
public void update(String name, Integer password) {
System.out.println("我是update()方法");
}
三 、PersonHander ----写入自己
public class PersonHander implements InvocationHandler{
private PerSonServiceImpl perSonServiceImpl;
public Object createProxyInstance(PersonServicw perSonServiceImpl){
this.perSonServiceImpl=(PerSonServiceImpl)perSonServiceImpl;
return Proxy.newProxyInstance(this.perSonServiceImpl.getClass().getClassLoader(),
this.perSonServiceImpl.getClass().getInterfaces(), this);
}
public Object invoke(Object arg0, Method method, Object[] arg2) throws Throwable {
Object result=null;
if(perSonServiceImpl.getUser()!=null){
result=method.invoke(perSonServiceImpl, arg2);
}else{
System.out.println("该用户没有权限");
}
return result;
}
}
测试类:
public static void main(String[] args) throws Exception{
PersonServicw perSonServiceImpl=new PerSonServiceImpl();
PersonHander hander=new PersonHander();
PersonServicw personServicw=(PersonServicw)hander.createProxyInstance(perSonServiceImpl);
personServicw.save("88");
}
代理模式-动态代理(基于接口,JDK动态代理)jdk动态代理和cglib动态代理
Java动态代理之JDK动态代理和CGLib动态代理jdk动态代理
谁与争锋,JDK动态代理大战CGLib动态代理jdk动态代理和cglib动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理jdk静态代理和动态代理
静态代理,JDK动态代理,Cglib动态代理详解jdk动态代理
代理模式-动态代理(基于接口,JDK动态代理)cglib代理和jdk动态代理区别
动态代理:JDK动态代理和CGLIB代理的区别cglib代理和jdk动态代理区别
#yyds干货盘点# 设计模式之静态代理,jdk动态代理,cglib动态代理的区别jdk静态代理和动态代理