Java Reflection Miscs


Java Reflection Miscs

Proxy Design Pattern
A proxy supports the interface of another object, its target, so that the proxy can substitute for the target for all practical purposes.
The proxy implements the same interface as the target so that it can be used in exactly the same way. The proxy delegates some or all of the calls that it receives to its target and thus acts as either an intermediary or a substitute. In its role as an intermediary, the proxy may add functionality either before or after the method is forwarded to the target. This gives the reflective programmer the capability to add behavior to objects
Using Java’s dynamic proxy
The Java reflection API contains a dynamic proxy-creation facility:
java.lang.reflect.Proxy.
Proxy class
Each class constructed by these factory methods is a public final subclass of Proxy, referred to as a proxy class. We refer to an instance of one of these dynamically constructed proxies as a proxy instance. We call the interfaces that the proxy class implements in this way proxied interfaces. A proxy instance is assignment-compatible with all of its proxied interfaces.
All proxy classes have a constructor that takes an InvocationHandler parameter. InvocationHandler is an interface for objects that handle methods received by proxy instances through their proxied interfaces.
Understanding invocation handlers
Proxy allows programmers to accomplish the delegation task by providing the
InvocationHandler interface.
invocation handlers are objects that handle each method call for a proxy instance. Invocation handlers are also responsible for holding any references to targets of the proxy instance.
A proxy instance forwards method calls to its invocation handler by calling invoke.
public interface InvocationHandler {
   public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable;
}
UndeclaredThrowableException
The exception UndeclaredThrowableException may be thrown by the execution of the invoke method.  UndeclaredThrowableException wraps non-runtime exceptions that are not declared by the interface for the method being called. The cause of the wrapped exception may be accessed with getCause.
Handling the methods of Object
hashCode, equals, toString and finalize are dispatched to the invoke method in the
same manner as any other proxied method.
Method intercession does not take place for the other methods declared by
java.lang.Object, such as wait, notify.
Chaining proxies

One of the strengths of using proxies is that they can be arranged in a chain, with each proxy but the last having another proxy as its target. The last target in the chain is the real target object.
Usage:
Object proxy = Proxy.newProxyInstance( SomeInterface.getClassLoader(), Class[]{SomeInterface.class}, new SomeIH( obj ) );
public static Object newInstance(Object obj) {
    return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj
            .getClass().getInterfaces(), new DebugProxy(obj));
}
Java code digestion
public class Proxy implements java.io.Serializable {
// the usage of WeakHashMap
private static Map proxyClasses = Collections.synchronizedMap(new WeakHashMap());
public static Object newProxyInstance(ClassLoader loader,
Class[] interfaces,
InvocationHandler h)
{
      Class cl = getProxyClass(loader, interfaces);
    Constructor cons = cl.getConstructor(constructorParams);
      return (Object) cons.newInstance(new Object[] { h });                     
}

public static Class getProxyClass(ClassLoader loader, Class... interfaces)
{
    byte[] proxyClassFile = ProxyGenerator.generateProxyClass(
    proxyName, interfaces);
    proxyClass = defineClass0(loader, proxyName,
    proxyClassFile, 0, proxyClassFile.length);
    proxyClasses.put(proxyClass, null);
}

Resources
Post a Comment

Labels

Java (159) Lucene-Solr (110) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (36) Eclipse (34) Code Example (31) Linux (24) JavaScript (23) Spring (22) Windows (22) Web Development (20) Nutch2 (18) Tools (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (12) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Http Client (8) Maven (8) Problem Solving (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) Lesson Learned (5) Programmer Skills (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) System Design (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts