静态代理和动态代理
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
目标对象: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
静态代理对象: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
测试类: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
以上是关于静态代理和动态代理的主要内容,如果未能解决你的问题,请参考以下文章