码迷,mamicode.com
首页 > 其他好文 > 详细

静态代理和动态代理

时间:2019-08-22 22:20:23      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:img   动态创建   his   private   alt   print   this   文件   user   

(1)按照代理的创建时期,代理类可以分为两种: 

         静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。

         动态:在程序运行时运用反射机制动态创建而成。

(2)静态代理:  静态代理需要代理对象和目标对象实现一样的接口。

    举例说明:

    接口类: UserManager

技术图片
 1 public interface UserManager {
 2 
 3     public void addUser(String username, String password);
 4     
 5     public void delUser(int userId);
 6     
 7     public String findUserById(int userId);
 8     
 9     public void modifyUser(int userId, String username, String password);
10 }
View Code

    目标对象:UserManagerImpl 

技术图片
 1 public class UserManagerImpl implements UserManager {
 2 
 3     public void addUser(String username, String password) {
 4         System.out.println("---------UserManagerImpl.add()--------");
 5     }
 6 
 7     public void delUser(int userId) {
 8     System.out.println("---------UserManagerImpl.delUser()--------");
 9     }
10 
11     public String findUserById(int userId) {
12     System.out.println("---------UserManagerImpl.findUserById()--------");
13         return "张三";
14     }
15 
16     public void modifyUser(int userId, String username, String password) {
17     System.out.println("---------UserManagerImpl.modifyUser()--------");
18     }
19 }
View Code

    静态代理对象:UserManagerImplProxy 需要实现UserManager 接口!

技术图片
 1 public class UserManagerImplProxy implements UserManager {
 2     private UserManager userManager;
 3     public UserManagerImplProxy(UserManager userManager) {
 4         this.userManager = userManager;
 5     }
 6     public void addUser(String username, String password) {
 7         checkSecurity();
 8         userManager.addUser(username, password);
 9     }
10     public void delUser(int userId) {
11         checkSecurity();
12         userManager.delUser(userId);
13     }
14     public String findUserById(int userId) {
15         checkSecurity();
16         return userManager.findUserById(userId);
17     }
18     public void modifyUser(int userId, String username, String password) {
19         checkSecurity();
20         userManager.modifyUser(userId, username, password);
21     }
22     private void checkSecurity() {
23         System.out.println("-------checkSecurity-------");
24     }    
25 }
View Code

    测试类:StaticUserProxy

技术图片
1 public class StaticUserProxy {    
2     @Test
3     public void testStaticProxy(){        
4         UserManager target = new UserManagerImpl();//目标对象
5         UserManagerImplProxy proxy=new UserManagerImplProxy(target);//代理对象
6         proxy.delUser("ndvhue32577349");
7     }
8 }
View Code

 

 

 

静态代理和动态代理

标签:img   动态创建   his   private   alt   print   this   文件   user   

原文地址:https://www.cnblogs.com/fzdsy/p/11396876.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!