天天看點

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) {

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

繼續閱讀