静态代理和动态代理

Posted fzdsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态代理和动态代理相关的知识,希望对你有一定的参考价值。

(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

 

 

 

以上是关于静态代理和动态代理的主要内容,如果未能解决你的问题,请参考以下文章

Java动态代理与静态代理的定义与区别??

静态代理和动态代理原理及实现

浅谈静态代理和动态代理

解决全站字符编码问题--动态代理和静态代理

静态代理和动态代理

什么是反射技术?什么是静态代理?什么是动态代理?什么是aop