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");
 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章