Java基于JDK的动态代理(实例)

一、建立两个用来测试的接口

分别为:

UserManger.java

1 package laogao.com;
2 
3 public interface UserManger {
4     public void adduser();
5     public void deleteuser();
6     public void updateuser();
7     public void selectuser();
8 
9 }

StudentManger.java

package laogao.com;

public interface StudentManger {
    public void addstudemt();
    public void deletestudnt();
    public void updatestudent();
    public void Selectstudent();
    

}

二、建立以上的真实实现

UserMangerImpl.java

 1 package laogao.com;
 2 
 3 public class UserMangerImpl implements UserManger{
 4     public void adduser() {
 5             System.out.println("增加一个user");
 6     }
 7     public void deleteuser() {
 8             System.out.println("删除一个user");
 9     }
10 
11     public void updateuser() {
12         System.out.println("修改一个user");
13     }
14     public void selectuser() {
15         System.out.println("查询一个学生");
16         
17     }
18 
19 }

StudentMangerImpl.java

package laogao.com;

public class StudentMangerImpl implements StudentManger {

    public void addstudemt() {
        System.err.println("增加一个学生");
    }

    public void deletestudnt() {
      System.out.println("删除一个学生");
    }

    public void updatestudent() {
        System.out.println("修改学生信息");
        
    }
    public void Selectstudent() {
        System.out.println("查看学生信息");
    }
    

}

三、创建代理方法

ProxyCilent.java

 1 package laogao.com;
 2 
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Method;
 5 import java.lang.reflect.Proxy;
 6 
 7 public class ProxyCilent implements InvocationHandler {
 8         //声明一个真实实现
 9         private Object proxyImpl;
10         //传入一个真实实现返回一个代理实现
11         public  Object getproxy(Object proxyImpl) {
12             this.proxyImpl=proxyImpl;
13             return Proxy.newProxyInstance(proxyImpl.getClass().getClassLoader(), proxyImpl.getClass().getInterfaces(), this);
14         }
15     
16         
17     
18     
19 
20     @Override
21     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
22         // TODO Auto-generated method stub
23         this.anquan();
24         this.bgin();
25         Object invoke = method.invoke(proxyImpl, args);
26         this.end();
27         this.log();
28         return invoke;
29     }
30     public void anquan() {
31         System.out.println("安全检测!");
32         
33     }
34     public void bgin() {
35         System.out.println("开启事务!");
36         
37     }
38     public void end() {
39         System.out.println("提交事务!");
40         
41     }
42     public void log() {
43         System.out.println("日志提交!");
44         
45     }
46     
47 }

四、创建测试

Test.java

 1 package laogao.com;
 2 
 3 public class Test {
 4     public static void main(String[] args) {
 5         
 6         
 7         //创建代理对象
 8         ProxyCilent cilent=new ProxyCilent();
 9         UserManger UserManger = (UserManger)cilent.getproxy(new UserMangerImpl());
10         UserManger.adduser();
11         
12         StudentManger StudentMAnger = (StudentManger)cilent.getproxy(new StudentMangerImpl());
13         StudentMAnger.deletestudnt();
14     }
15 }

 

posted @ 2021-06-09 15:34  这里那里  阅读(108)  评论(0)    收藏  举报
Live2D