Динамическая прокси режим прокси ---

Во-первых, введение динамического агента

  • Динамические и статические роли прокси-агента совпадают, режим статического прокси прокси-класс пишется впереди нас, и динамический прокси-класс генерируется динамически, на самом деле, суть статического и динамического прокси-агента, как, нужно запустить окончательную программу генерировать экземпляр прокси-объект, через который для расширения и завершить соответствующую бизнес-логику, но статического агента необходимо указать жестко и динамически генерировать эту реализацию динамической поддержки прокси во время выполнения. Очевидно, что преимущества динамически генерируемые во время кодирования, прокси-логика и бизнес-логика независимо друг от друга, не влияют друг, не навязчивый, там нет связи

Во-вторых, динамические прокси, связанные с двумя классами

  •  Интерфейс InvocationHandler: Этот интерфейс определяет только метод объект: вызов (объект Object, метод Method, Object [арг]). При фактическом использовании, первый параметр OBJ обычно относится прокси-класс, является метод прокси, параметр арг массив для этого метода. Этот абстрактный метод, реализованный в динамическом прокси-классе
  • Прокси: Этот класс динамический прокси - класс, эффект аналогичен воплощению ProxySubject, который в основном включает в себя следующее содержание:
    Защищенный прокси (из InvocationHandler ч): Конструктор, к внутренней оценке ч для задания.
    Статический класс getProxyClass (ClassLoader погрузчик, класс [] интерфейсы): получение прокси - класса, в котором загрузчик классов является загрузчиком, массив всех интерфейсов интерфейса имеет реальный класс

 

В-третьих, код динамических агентов

1, аннотация роль

1  // абстрактная роль 
2  публичного  интерфейса пользователя {
 3.  
4.      Общественность  недействительных надстроек ();
 . 5  
. 6 }

 

2, реальная роль

1  // истинные роли 
2  общественного  класса UserImpl орудия пользователем {
 3.  
4.      Общественность  недействительными добавить () {
 5.          System.out.println ( "Это способ добавить" );
 6      }
 . 7  
. 8 }

 

3, интерфейсный объект динамически генерируемые прокси-класс

1  импорт java.lang.reflect.InvocationHandler;
2  импорт java.lang.reflect.Method;
3  импорта java.lang.reflect.Proxy;
4  
5  общественный  класс InvocationHandlerProxy   реализует InvocationHandler {
 6  
7      частных пользователей пользователя;
-  
9      общественной  недействительная SETUSER (пользователь Пользователя) {
 10          это .user = пользователь;
11      }
 12  
13      // 动态生成代理类
14      общественных объектов getProxy () {
 15          возвратаProxy.newProxyInstance ( это .getClass () getClassLoader () ,.
 16                  user.getClass () The getInterfaces () ,. этого );
 . 17      }
 18  
19.      // Прокси - сервер: прокси - класс
 20      // Метод: вызов обработчика прокси - класс метод объекта 
21 является      общественный объект Invoke (прокси - объект, метод, метод Object [арг]) бросает на Throwable {
 22          show1 ();
 23          Объект Invoke = Method.invoke (Пользователь, арг);
 24          Show2 ();
 25          возврата Invoke;
 26      }
 27  
28      общественности недействительными show1 () {
 29          System.out.println ( "показать方法1" );
30      }
 31  
32      общественных  пустот show2 () {
 33          System.out.println ( "показать方法2" );
34      }
 35 }

[Примечание] InvocationHandler руководство пакет

 

 4, тест

 1 public class Test {
 2     public static void main(String[] args) {
 3 
 4         UserImpl userImpl = new UserImpl();
 5 
 6         InvocationHandlerProxy ihp = new InvocationHandlerProxy();
 7         ihp.setUser(userImpl);
 8 
 9         User proxy = (User) ihp.getProxy();
10 
11         proxy.add();
12     }
13 }

 

5,运行结果

 

 

四,总结

 动态代理的好处

  • 可以使真实角色更加纯粹,不用去关注一些公共的事情
  • 公共的业务由代理来完成,实现业务的分工
  • 公共业务的要扩展的话,可以更加集中和方便
  • 一个动态代理,一般代理一类的业务,一个动态代理可以代理多个类,代理接口

 

рекомендация

отwww.cnblogs.com/tqsh/p/11304211.html
рекомендация