SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Understanding Dynamic Proxies
How to create proxy classes in runtime




Osoco
Rafael Luque
Introduction


Contents



1   Introduction


2   Creating a Proxy Class
      Proxy Class Properties


3   Creating a Proxy Instance


4   Examples




    Rafael Luque (Osoco)       Java Dynamic Proxies   04/2009   2 / 17
Introduction


Introduction



Dynamic Proxy Class
A class that implements a list of interfaces specified at runtime, such
that a method invocation through one of the interfaces on an instance
of the class will be encoded and dispatched to another object through
a uniform interface.

Usage
Create a proxy object for a list of interfaces without writing the proxy
class at compile-time.




    Rafael Luque (Osoco)        Java Dynamic Proxies             04/2009   3 / 17
Introduction


Introduction



Dynamic Proxy Class
A class that implements a list of interfaces specified at runtime, such
that a method invocation through one of the interfaces on an instance
of the class will be encoded and dispatched to another object through
a uniform interface.

Usage
Create a proxy object for a list of interfaces without writing the proxy
class at compile-time.




    Rafael Luque (Osoco)        Java Dynamic Proxies             04/2009   3 / 17
Creating a Proxy Class


Contents



1   Introduction


2   Creating a Proxy Class
      Proxy Class Properties


3   Creating a Proxy Instance


4   Examples




    Rafael Luque (Osoco)                Java Dynamic Proxies   04/2009   4 / 17
Creating a Proxy Class


Creating a Proxy Class

 • Proxy classes and instances are created using static methods of
   java.lang.reflect.Proxy.
 • Proxy.getProxyClass() returns the java.lang.Class
   object for a proxy class given a class loader and an array of
   interfaces.
 • The proxy class will be defined in the specified class loader and
   will implement all the interfaces.
 • Dynamic Proxy Class API implementations keep a cache of
   generated proxy classes:
       • If a proxy class for the same permutation of interfaces has already
           been defined by the class loader, then the existing proxy class will
           be returned; otherwise, a proxy class for those interfaces will be
           generated dynamically.


   Rafael Luque (Osoco)                Java Dynamic Proxies          04/2009   5 / 17
Creating a Proxy Class


Creating a Proxy Class

 • Proxy classes and instances are created using static methods of
   java.lang.reflect.Proxy.
 • Proxy.getProxyClass() returns the java.lang.Class
   object for a proxy class given a class loader and an array of
   interfaces.
 • The proxy class will be defined in the specified class loader and
   will implement all the interfaces.
 • Dynamic Proxy Class API implementations keep a cache of
   generated proxy classes:
       • If a proxy class for the same permutation of interfaces has already
           been defined by the class loader, then the existing proxy class will
           be returned; otherwise, a proxy class for those interfaces will be
           generated dynamically.


   Rafael Luque (Osoco)                Java Dynamic Proxies          04/2009   5 / 17
Creating a Proxy Class


Creating a Proxy Class

 • Proxy classes and instances are created using static methods of
   java.lang.reflect.Proxy.
 • Proxy.getProxyClass() returns the java.lang.Class
   object for a proxy class given a class loader and an array of
   interfaces.
 • The proxy class will be defined in the specified class loader and
   will implement all the interfaces.
 • Dynamic Proxy Class API implementations keep a cache of
   generated proxy classes:
       • If a proxy class for the same permutation of interfaces has already
           been defined by the class loader, then the existing proxy class will
           be returned; otherwise, a proxy class for those interfaces will be
           generated dynamically.


   Rafael Luque (Osoco)                Java Dynamic Proxies          04/2009   5 / 17
Creating a Proxy Class


Creating a Proxy Class

 • Proxy classes and instances are created using static methods of
   java.lang.reflect.Proxy.
 • Proxy.getProxyClass() returns the java.lang.Class
   object for a proxy class given a class loader and an array of
   interfaces.
 • The proxy class will be defined in the specified class loader and
   will implement all the interfaces.
 • Dynamic Proxy Class API implementations keep a cache of
   generated proxy classes:
       • If a proxy class for the same permutation of interfaces has already
           been defined by the class loader, then the existing proxy class will
           be returned; otherwise, a proxy class for those interfaces will be
           generated dynamically.


   Rafael Luque (Osoco)                Java Dynamic Proxies          04/2009   5 / 17
Creating a Proxy Class


Creating a Proxy Class

 • Proxy classes and instances are created using static methods of
   java.lang.reflect.Proxy.
 • Proxy.getProxyClass() returns the java.lang.Class
   object for a proxy class given a class loader and an array of
   interfaces.
 • The proxy class will be defined in the specified class loader and
   will implement all the interfaces.
 • Dynamic Proxy Class API implementations keep a cache of
   generated proxy classes:
       • If a proxy class for the same permutation of interfaces has already
           been defined by the class loader, then the existing proxy class will
           be returned; otherwise, a proxy class for those interfaces will be
           generated dynamically.


   Rafael Luque (Osoco)                Java Dynamic Proxies          04/2009   5 / 17
Creating a Proxy Class


Proxy.getProxyClass Method




Proxy.getProxyClass() method
  public static Class getProxyClass(
             ClassLoader loader,
             Class[] interfaces)
        throws IllegalArgumentException




   Rafael Luque (Osoco)                Java Dynamic Proxies   04/2009   6 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Class   Proxy Class Properties


Proxy Class Properties


 • Proxy classes are public, final, and not abstract.
 • A proxy class extends java.lang.reflect.Proxy.
 • The unqualified name of a proxy class is unspecified.
 • If a proxy class implements a non-public interface, then it will be
   defined in the same package as that interface. Otherwise, the
   package of a proxy class is also unspecified.
 • A proxy class implements exactly the interfaces specified at its
   creation, in the same order.
 • The Proxy.isProxyClass will return true if it is passed a proxy
   class.



   Rafael Luque (Osoco)                Java Dynamic Proxies                 04/2009   7 / 17
Creating a Proxy Instance


Contents



1   Introduction


2   Creating a Proxy Class
      Proxy Class Properties


3   Creating a Proxy Instance


4   Examples




    Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   8 / 17
Creating a Proxy Instance


Invocation Handler



 • Each proxy instance has an associated invocation handler object,
   which implements the interface
   java.lang.reflect.InvocationHandler.
 • A method invocation on a proxy instance will be dispatched to the
   invoke method of the instance’s invocation handler.
 • Invoke method receives the proxy instance, a
   java.lang.reflect.Method object identifying the method
   that was invoked and an array of type Object containing the
   arguments.




   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   9 / 17
Creating a Proxy Instance


Invocation Handler



 • Each proxy instance has an associated invocation handler object,
   which implements the interface
   java.lang.reflect.InvocationHandler.
 • A method invocation on a proxy instance will be dispatched to the
   invoke method of the instance’s invocation handler.
 • Invoke method receives the proxy instance, a
   java.lang.reflect.Method object identifying the method
   that was invoked and an array of type Object containing the
   arguments.




   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   9 / 17
Creating a Proxy Instance


Invocation Handler



 • Each proxy instance has an associated invocation handler object,
   which implements the interface
   java.lang.reflect.InvocationHandler.
 • A method invocation on a proxy instance will be dispatched to the
   invoke method of the instance’s invocation handler.
 • Invoke method receives the proxy instance, a
   java.lang.reflect.Method object identifying the method
   that was invoked and an array of type Object containing the
   arguments.




   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   9 / 17
Creating a Proxy Instance


Proxy Instance I


  • Each proxy class has one public constructor that takes as
    argument an implementation of the interface
    InvocationHandler.
  • You can instantiate the proxy class using the reflection API:

Proxy for the Foo interface
  Class proxyClass = Proxy.getProxyClass(
      Foo.class.getClassLoader(), new Class[] { Foo.class });
  InvocationHandler handler = new MyInvocationHandler(...);
  Foo f = (Foo) proxyClass.
      getConstructor(new Class[] { InvocationHandler.class }).
      newInstance(new Object[] { handler });




    Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   10 / 17
Creating a Proxy Instance


Proxy Instance II


  • Better, you can use the Proxy.newProxyInstance method:

Proxy using Proxy.newProxyInstance
  InvocationHandler handler = new MyInvocationHandler(...);
  Foo f = (Foo) Proxy.newProxyInstance(
      Foo.class.getClassLoader(),
      new Class[] { Foo.class },
      handler);


  • This method combines the actions of calling
    Proxy.getProxyClass with invoking the constructor with an
    invocation handler.




   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   11 / 17
Creating a Proxy Instance


Proxy Instance Properties I


  • Given a proxy instance proxy and one of the interfaces
    implemented by its proxy class Foo, the following expression will
    return true:
            proxy instanceof Foo

    and the following cast operation will succeed:
            (Foo) proxy

  • The static Proxy.getInvocationHandler method will return
    the invocation handler associated with the proxy instance passed
    as its argument.


   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   12 / 17
Creating a Proxy Instance


Proxy Instance Properties II



  • An interface method invocation on a proxy instance will be
    encoded and dispatched to the invocation handler’s invoke
    method.
  • An invocation of the hashCode, equals, or toString methods
    declared in java.lang.Object on a proxy instance will be also
    encoded and dispatched.




   Rafael Luque (Osoco)                   Java Dynamic Proxies   04/2009   13 / 17
Examples


Contents



1   Introduction


2   Creating a Proxy Class
      Proxy Class Properties


3   Creating a Proxy Instance


4   Examples




    Rafael Luque (Osoco)       Java Dynamic Proxies   04/2009   14 / 17
Examples


 DebugProxy Example I
     A proxy that prints out a message before and after each method
     invocation on an object that implements an arbitrary list of interfaces.
1        import j a v a . l a n g . r e f l e c t . Proxy ;
2
3        public class DebugProxy
4            implements j a v a . l a n g . r e f l e c t . I n v o c a t i o n H a n d l e r {
5
6           private Object obj ;
7
8           public s t a t i c O b j e c t newInstance ( O b j e c t o b j ) {
9             r e t u r n Proxy . newProxyInstance (
10                o b j . g e t C l a s s ( ) . getClassLoader ( ) ,
11                obj . getClass ( ) . g e t I n t e r f a c e s ( ) ,
12               new DebugProxy ( o b j ) ) ;
13          }
14
15          p r i v a t e DebugProxy ( O b j e c t o b j ) {
16              this . obj = obj ;
17          }
18


         Rafael Luque (Osoco)                      Java Dynamic Proxies                           04/2009   15 / 17
Examples


 DebugProxy Example II

19       public O b j e c t i n v o k e ( O b j e c t proxy , Method m, O b j e c t [ ] args )
20           throws Throwable {
21
22           Object r e s u l t ;
23           try {
24             System . o u t . p r i n t l n ( ‘ ‘ b e f o r e method ’ ’ ) ;
25             r e s u l t = m. i n v o k e ( obj , args ) ;
26           } catch ( I n v o c a t i o n T a r g e t E x c e p t i o n e ) {
27             throw e . g e t T a r g e t E x c e p t i o n ( ) ;
28           } catch ( E x c e p t i o n e ) {
29             throw new RuntimeException ( ) ;
30           } finally {
31             System . o u t . p r i n t l n ( ‘ ‘ a f t e r method ’ ’ ) ;
32           }
33           return r e s u l t ;
34
35       }
36
37   }



     Rafael Luque (Osoco)                       Java Dynamic Proxies                    04/2009   16 / 17
Understanding Dynamic Proxies
How to create proxy classes in runtime




Osoco
Rafael Luque

Contenu connexe

Tendances

Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classesyoavwix
 
Smalltalk on the JVM
Smalltalk on the JVMSmalltalk on the JVM
Smalltalk on the JVMESUG
 
Java byte code & virtual machine
Java byte code & virtual machineJava byte code & virtual machine
Java byte code & virtual machineLaxman Puri
 
Introduction to java (revised)
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)Sujit Majety
 
Calypso underhood
 Calypso underhood Calypso underhood
Calypso underhoodESUG
 
Introduction to Java Programming
Introduction to Java Programming Introduction to Java Programming
Introduction to Java Programming Saravanakumar R
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924yohanbeschi
 
Java virtual machine
Java virtual machineJava virtual machine
Java virtual machineNikhil Sharma
 
Introduction to Java Programming
Introduction to Java ProgrammingIntroduction to Java Programming
Introduction to Java ProgrammingRavi Kant Sahu
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarAbir Mohammad
 
Core Java Introduction | Basics
Core Java Introduction  | BasicsCore Java Introduction  | Basics
Core Java Introduction | BasicsHùng Nguyễn Huy
 
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...ESUG
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to javajayc8586
 

Tendances (20)

Java bytecode and classes
Java bytecode and classesJava bytecode and classes
Java bytecode and classes
 
JAVA BYTE CODE
JAVA BYTE CODEJAVA BYTE CODE
JAVA BYTE CODE
 
Smalltalk on the JVM
Smalltalk on the JVMSmalltalk on the JVM
Smalltalk on the JVM
 
Java architecture
Java architectureJava architecture
Java architecture
 
Java byte code & virtual machine
Java byte code & virtual machineJava byte code & virtual machine
Java byte code & virtual machine
 
Presentation on java
Presentation  on  javaPresentation  on  java
Presentation on java
 
Introduction to java (revised)
Introduction to java (revised)Introduction to java (revised)
Introduction to java (revised)
 
Calypso underhood
 Calypso underhood Calypso underhood
Calypso underhood
 
Lec 3 01_aug13
Lec 3 01_aug13Lec 3 01_aug13
Lec 3 01_aug13
 
Introduction to Java Programming
Introduction to Java Programming Introduction to Java Programming
Introduction to Java Programming
 
Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924Introduction to the Java bytecode - So@t - 20130924
Introduction to the Java bytecode - So@t - 20130924
 
Java virtual machine
Java virtual machineJava virtual machine
Java virtual machine
 
Introduction to Java Programming
Introduction to Java ProgrammingIntroduction to Java Programming
Introduction to Java Programming
 
Learn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat ShahriyarLearn Java with Dr. Rifat Shahriyar
Learn Java with Dr. Rifat Shahriyar
 
Lecture 3
Lecture 3Lecture 3
Lecture 3
 
Core Java Introduction | Basics
Core Java Introduction  | BasicsCore Java Introduction  | Basics
Core Java Introduction | Basics
 
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...
First-Class Undefined Classes for Pharo, From Alternative Designs to a Unifie...
 
History of java'
History of java'History of java'
History of java'
 
Introduction to JAVA
Introduction to JAVAIntroduction to JAVA
Introduction to JAVA
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 

Similaire à Understanding Java Dynamic Proxies

Java architecture for xml binding
Java architecture for xml bindingJava architecture for xml binding
Java architecture for xml bindingKiran Gajbhiye
 
5 the final_hard_part
5 the final_hard_part5 the final_hard_part
5 the final_hard_partHonnix Liang
 
A begineers guide of JAVA - Getting Started
 A begineers guide of JAVA - Getting Started A begineers guide of JAVA - Getting Started
A begineers guide of JAVA - Getting StartedRakesh Madugula
 
chap 10 : Development (scjp/ocjp)
chap 10 : Development (scjp/ocjp)chap 10 : Development (scjp/ocjp)
chap 10 : Development (scjp/ocjp)It Academy
 
JVM, JRE and Javac are the main part for the java program
 JVM, JRE and Javac are the main part for the java program JVM, JRE and Javac are the main part for the java program
JVM, JRE and Javac are the main part for the java programsiyaram ray
 
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis ToolWebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis ToolJeffrey West
 
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool Demo
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool DemoWebLogic Filtering ClassLoader and ClassLoader Analysis Tool Demo
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool DemoJeffrey West
 
Unit8 security (2) java
Unit8 security (2) javaUnit8 security (2) java
Unit8 security (2) javaSharafat Husen
 
OOP with Java
OOP with JavaOOP with Java
OOP with JavaOmegaHub
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshellBrockhaus Group
 
Javascript classes and scoping
Javascript classes and scopingJavascript classes and scoping
Javascript classes and scopingPatrick Sheridan
 
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QAFest
 
basic core java up to operator
basic core java up to operatorbasic core java up to operator
basic core java up to operatorkamal kotecha
 
ProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsBinary Studio
 

Similaire à Understanding Java Dynamic Proxies (20)

Java architecture for xml binding
Java architecture for xml bindingJava architecture for xml binding
Java architecture for xml binding
 
5 the final_hard_part
5 the final_hard_part5 the final_hard_part
5 the final_hard_part
 
A begineers guide of JAVA - Getting Started
 A begineers guide of JAVA - Getting Started A begineers guide of JAVA - Getting Started
A begineers guide of JAVA - Getting Started
 
Java Class Loader
Java Class LoaderJava Class Loader
Java Class Loader
 
chap 10 : Development (scjp/ocjp)
chap 10 : Development (scjp/ocjp)chap 10 : Development (scjp/ocjp)
chap 10 : Development (scjp/ocjp)
 
JVM, JRE and Javac are the main part for the java program
 JVM, JRE and Javac are the main part for the java program JVM, JRE and Javac are the main part for the java program
JVM, JRE and Javac are the main part for the java program
 
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis ToolWebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
WebLogic's ClassLoaders, Filtering ClassLoader and ClassLoader Analysis Tool
 
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool Demo
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool DemoWebLogic Filtering ClassLoader and ClassLoader Analysis Tool Demo
WebLogic Filtering ClassLoader and ClassLoader Analysis Tool Demo
 
Java Class Loading
Java Class LoadingJava Class Loading
Java Class Loading
 
Class loaders
Class loadersClass loaders
Class loaders
 
Packages and interfaces
Packages and interfacesPackages and interfaces
Packages and interfaces
 
Unit8 security (2) java
Unit8 security (2) javaUnit8 security (2) java
Unit8 security (2) java
 
OOP with Java
OOP with JavaOOP with Java
OOP with Java
 
Arquillian in a nutshell
Arquillian in a nutshellArquillian in a nutshell
Arquillian in a nutshell
 
Diving into Java Class Loader
Diving into Java Class LoaderDiving into Java Class Loader
Diving into Java Class Loader
 
Rmi
RmiRmi
Rmi
 
Javascript classes and scoping
Javascript classes and scopingJavascript classes and scoping
Javascript classes and scoping
 
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
QA Fes 2016. Александр Хотемской. Обзор ProtractorJS как фреймворка для брауз...
 
basic core java up to operator
basic core java up to operatorbasic core java up to operator
basic core java up to operator
 
ProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applicationsProtractorJS for automated testing of Angular 1.x/2.x applications
ProtractorJS for automated testing of Angular 1.x/2.x applications
 

Dernier

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 

Dernier (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 

Understanding Java Dynamic Proxies

  • 1. Understanding Dynamic Proxies How to create proxy classes in runtime Osoco Rafael Luque
  • 2. Introduction Contents 1 Introduction 2 Creating a Proxy Class Proxy Class Properties 3 Creating a Proxy Instance 4 Examples Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 2 / 17
  • 3. Introduction Introduction Dynamic Proxy Class A class that implements a list of interfaces specified at runtime, such that a method invocation through one of the interfaces on an instance of the class will be encoded and dispatched to another object through a uniform interface. Usage Create a proxy object for a list of interfaces without writing the proxy class at compile-time. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 3 / 17
  • 4. Introduction Introduction Dynamic Proxy Class A class that implements a list of interfaces specified at runtime, such that a method invocation through one of the interfaces on an instance of the class will be encoded and dispatched to another object through a uniform interface. Usage Create a proxy object for a list of interfaces without writing the proxy class at compile-time. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 3 / 17
  • 5. Creating a Proxy Class Contents 1 Introduction 2 Creating a Proxy Class Proxy Class Properties 3 Creating a Proxy Instance 4 Examples Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 4 / 17
  • 6. Creating a Proxy Class Creating a Proxy Class • Proxy classes and instances are created using static methods of java.lang.reflect.Proxy. • Proxy.getProxyClass() returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. • The proxy class will be defined in the specified class loader and will implement all the interfaces. • Dynamic Proxy Class API implementations keep a cache of generated proxy classes: • If a proxy class for the same permutation of interfaces has already been defined by the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 5 / 17
  • 7. Creating a Proxy Class Creating a Proxy Class • Proxy classes and instances are created using static methods of java.lang.reflect.Proxy. • Proxy.getProxyClass() returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. • The proxy class will be defined in the specified class loader and will implement all the interfaces. • Dynamic Proxy Class API implementations keep a cache of generated proxy classes: • If a proxy class for the same permutation of interfaces has already been defined by the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 5 / 17
  • 8. Creating a Proxy Class Creating a Proxy Class • Proxy classes and instances are created using static methods of java.lang.reflect.Proxy. • Proxy.getProxyClass() returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. • The proxy class will be defined in the specified class loader and will implement all the interfaces. • Dynamic Proxy Class API implementations keep a cache of generated proxy classes: • If a proxy class for the same permutation of interfaces has already been defined by the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 5 / 17
  • 9. Creating a Proxy Class Creating a Proxy Class • Proxy classes and instances are created using static methods of java.lang.reflect.Proxy. • Proxy.getProxyClass() returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. • The proxy class will be defined in the specified class loader and will implement all the interfaces. • Dynamic Proxy Class API implementations keep a cache of generated proxy classes: • If a proxy class for the same permutation of interfaces has already been defined by the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 5 / 17
  • 10. Creating a Proxy Class Creating a Proxy Class • Proxy classes and instances are created using static methods of java.lang.reflect.Proxy. • Proxy.getProxyClass() returns the java.lang.Class object for a proxy class given a class loader and an array of interfaces. • The proxy class will be defined in the specified class loader and will implement all the interfaces. • Dynamic Proxy Class API implementations keep a cache of generated proxy classes: • If a proxy class for the same permutation of interfaces has already been defined by the class loader, then the existing proxy class will be returned; otherwise, a proxy class for those interfaces will be generated dynamically. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 5 / 17
  • 11. Creating a Proxy Class Proxy.getProxyClass Method Proxy.getProxyClass() method public static Class getProxyClass( ClassLoader loader, Class[] interfaces) throws IllegalArgumentException Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 6 / 17
  • 12. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 13. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 14. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 15. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 16. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 17. Creating a Proxy Class Proxy Class Properties Proxy Class Properties • Proxy classes are public, final, and not abstract. • A proxy class extends java.lang.reflect.Proxy. • The unqualified name of a proxy class is unspecified. • If a proxy class implements a non-public interface, then it will be defined in the same package as that interface. Otherwise, the package of a proxy class is also unspecified. • A proxy class implements exactly the interfaces specified at its creation, in the same order. • The Proxy.isProxyClass will return true if it is passed a proxy class. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 7 / 17
  • 18. Creating a Proxy Instance Contents 1 Introduction 2 Creating a Proxy Class Proxy Class Properties 3 Creating a Proxy Instance 4 Examples Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 8 / 17
  • 19. Creating a Proxy Instance Invocation Handler • Each proxy instance has an associated invocation handler object, which implements the interface java.lang.reflect.InvocationHandler. • A method invocation on a proxy instance will be dispatched to the invoke method of the instance’s invocation handler. • Invoke method receives the proxy instance, a java.lang.reflect.Method object identifying the method that was invoked and an array of type Object containing the arguments. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 9 / 17
  • 20. Creating a Proxy Instance Invocation Handler • Each proxy instance has an associated invocation handler object, which implements the interface java.lang.reflect.InvocationHandler. • A method invocation on a proxy instance will be dispatched to the invoke method of the instance’s invocation handler. • Invoke method receives the proxy instance, a java.lang.reflect.Method object identifying the method that was invoked and an array of type Object containing the arguments. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 9 / 17
  • 21. Creating a Proxy Instance Invocation Handler • Each proxy instance has an associated invocation handler object, which implements the interface java.lang.reflect.InvocationHandler. • A method invocation on a proxy instance will be dispatched to the invoke method of the instance’s invocation handler. • Invoke method receives the proxy instance, a java.lang.reflect.Method object identifying the method that was invoked and an array of type Object containing the arguments. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 9 / 17
  • 22. Creating a Proxy Instance Proxy Instance I • Each proxy class has one public constructor that takes as argument an implementation of the interface InvocationHandler. • You can instantiate the proxy class using the reflection API: Proxy for the Foo interface Class proxyClass = Proxy.getProxyClass( Foo.class.getClassLoader(), new Class[] { Foo.class }); InvocationHandler handler = new MyInvocationHandler(...); Foo f = (Foo) proxyClass. getConstructor(new Class[] { InvocationHandler.class }). newInstance(new Object[] { handler }); Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 10 / 17
  • 23. Creating a Proxy Instance Proxy Instance II • Better, you can use the Proxy.newProxyInstance method: Proxy using Proxy.newProxyInstance InvocationHandler handler = new MyInvocationHandler(...); Foo f = (Foo) Proxy.newProxyInstance( Foo.class.getClassLoader(), new Class[] { Foo.class }, handler); • This method combines the actions of calling Proxy.getProxyClass with invoking the constructor with an invocation handler. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 11 / 17
  • 24. Creating a Proxy Instance Proxy Instance Properties I • Given a proxy instance proxy and one of the interfaces implemented by its proxy class Foo, the following expression will return true: proxy instanceof Foo and the following cast operation will succeed: (Foo) proxy • The static Proxy.getInvocationHandler method will return the invocation handler associated with the proxy instance passed as its argument. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 12 / 17
  • 25. Creating a Proxy Instance Proxy Instance Properties II • An interface method invocation on a proxy instance will be encoded and dispatched to the invocation handler’s invoke method. • An invocation of the hashCode, equals, or toString methods declared in java.lang.Object on a proxy instance will be also encoded and dispatched. Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 13 / 17
  • 26. Examples Contents 1 Introduction 2 Creating a Proxy Class Proxy Class Properties 3 Creating a Proxy Instance 4 Examples Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 14 / 17
  • 27. Examples DebugProxy Example I A proxy that prints out a message before and after each method invocation on an object that implements an arbitrary list of interfaces. 1 import j a v a . l a n g . r e f l e c t . Proxy ; 2 3 public class DebugProxy 4 implements j a v a . l a n g . r e f l e c t . I n v o c a t i o n H a n d l e r { 5 6 private Object obj ; 7 8 public s t a t i c O b j e c t newInstance ( O b j e c t o b j ) { 9 r e t u r n Proxy . newProxyInstance ( 10 o b j . g e t C l a s s ( ) . getClassLoader ( ) , 11 obj . getClass ( ) . g e t I n t e r f a c e s ( ) , 12 new DebugProxy ( o b j ) ) ; 13 } 14 15 p r i v a t e DebugProxy ( O b j e c t o b j ) { 16 this . obj = obj ; 17 } 18 Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 15 / 17
  • 28. Examples DebugProxy Example II 19 public O b j e c t i n v o k e ( O b j e c t proxy , Method m, O b j e c t [ ] args ) 20 throws Throwable { 21 22 Object r e s u l t ; 23 try { 24 System . o u t . p r i n t l n ( ‘ ‘ b e f o r e method ’ ’ ) ; 25 r e s u l t = m. i n v o k e ( obj , args ) ; 26 } catch ( I n v o c a t i o n T a r g e t E x c e p t i o n e ) { 27 throw e . g e t T a r g e t E x c e p t i o n ( ) ; 28 } catch ( E x c e p t i o n e ) { 29 throw new RuntimeException ( ) ; 30 } finally { 31 System . o u t . p r i n t l n ( ‘ ‘ a f t e r method ’ ’ ) ; 32 } 33 return r e s u l t ; 34 35 } 36 37 } Rafael Luque (Osoco) Java Dynamic Proxies 04/2009 16 / 17
  • 29. Understanding Dynamic Proxies How to create proxy classes in runtime Osoco Rafael Luque