当被代理对象有接口的时候可以jdk动态代理技术
例子
如果StudentServiceImpl有User的时候就可以调用当中的方法,没有就不可以
public interface StudentService {
public void addStudent();
}
public class StudentServiceImpl implements StudentService{
private String user;
public StudentServiceImpl(String user) {
super();
this.user = user;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
@Override
public void addStudent() {
// TODO Auto-generated method stub
System.out.println("add ");
}
}
public class createProxy implements InvocationHandler{
private Object proxy;
public Object newProxy(Object proxy){
this.proxy=proxy;
return Proxy.newProxyInstance(this.proxy.getClass().getClassLoader(),this.proxy.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object obj, Method method, Object[] arg) throws Throwable {
// TODO Auto-generated method stub
System.out.println("22");
StudentServiceImpl ss=(StudentServiceImpl)this.proxy;
Object result=null;
System.out.println("1");
if(ss.getUser()!=null){
result=(Object)method.invoke(this.proxy, arg);
}
return obj;
}
}
test
public class test {
public static void main(String[] args) {
createProxy proxy=new createProxy();
StudentService ss=(StudentService)proxy.newProxy(new StudentServiceImpl("****"));
ss.addStudent();
}
}
同样例子
如果被代理对象没有接口的时候
可以用cglib的创建代理