java知识点学习
java反射:
在Java程序中获得Class对象通常有如下三种方式:
1.使用Class类的forName(String clazzName)静态方法。该方法需要传入字符串参数,该字符串参数的值是某个类的全限定名(必须添加完整包名)。
2.调用某个类的class属性来获取该类对应的Class对象。
3.调用某个对象的getClass()方法。该方法是java.lang.Object类中的一个方法。
静态代理模式的简单实现
public class ProxyDemo { public static void main(String args[]){ RealSubject subject = new RealSubject(); Proxy p = new Proxy(subject); p.request(); } } interface Subject{ void request(); } class RealSubject implements Subject{ public void request(){ System.out.println("request"); } } class Proxy implements Subject{ private Subject subject; public Proxy(Subject subject){ this.subject = subject; } public void request(){ System.out.println("PreProcess"); subject.request(); System.out.println("PostProcess"); } }
动态代理模式的简单实现
package com.test;
import java.lang.reflect.*;
interface Subject{
void request();
}
class RealSubject implements Subject{
public void request(){
System.out.println("===RealSubject request===");
}
}
class ProxyHandler implements InvocationHandler{
private Subject subject;
public ProxyHandler(Subject subject){
this.subject=subject;
}
@Override
public Object invoke(Object proxyobject,Method method,Object[] args) throws Throwable{
System.out.println("===before===");
Object result=method.invoke(subject,args);
System.out.println("===after===");
return result;
}
}
public class proxy {
public static void main(String[] args){
RealSubject realsubject=new RealSubject();
ProxyHandler handler=new ProxyHandler(realsubject);
Subject proxySubject=(Subject)Proxy.newProxyInstance(RealSubject.class.getClassLoader(),RealSubject.class.getInterfaces(),handler);
proxySubject.request();
}
}