##适配模式
–自己理解:通过springmvc理解 类适配
适配模式大抵是一种为方法做参数绑定的方式。
即我们已知servlet是实现HttpServlet接口,所以它具有request、response等数据的传输,所以利用这一点,让一个类继承我们的handler实例,同时又去实现HttpServlet,就可以实现此方法既有handler的数据处理功能,又具有httpservlet的参数数据传输。
代理模式
代理模式分为动态代理和静态代理两种
静态代理:
静态代理是一种由一个共同接口,来串联代理类和被代理类。从而实现实现旧功能而添加新功能的一种方式。所谓静态,即在编译时三个类已经被确定好。这种模式常用在对过去的复杂类的功能进行修改、再处理。
动态代理:
动态代理是指在程序运行过程中,将方法植入进行。&但个人感觉实际上并没有在java运行时植入&,此理论具体要参考java的反射机制和内省(即可以透过方法在程序运行当中,了解到一个类的内部全部信息/暂时理解/)。
此方法依靠的是invocationHandler类。
同静态代理模式一致,需要共同的接口,但是动态代理的实现,需要多两个类:功能类和invocationHandler类(处理器),通过实现invocationHandler,将新增功能和原始功能嫁接在一起。
//实现Invocation
public class StuInvocationHandler<T> implements InvocationHandler{
T target;
public StuInvocationHandler(T target) {
this.target=target;
}
public Object invoke(Object proxy, Method method, Object[] arg) throws Throwable {
System.out.println("代理执行"+method.getName()+"方法");
TimeUntil.start();
Object result=method.invoke(target, arg);
TimeUntil.finish(method.getName());
return result;
}
//具体执行
public static void main(String[] args) {
Person zhangsan=new Student("zhangsan");
InvocationHandler stuHandler=new StuInvocationHandler<>(zhangsan);
Person stuProxy=(Person)Proxy.newProxyInstance(Person.class.getClassLoader(), new Class[]{Person.class}, stuHandler);
stuProxy.say();
}
反射的代码(简单的得到功能的原因,具体更深)
//功能A
public class A {
public void foo(String name){
System.out.println(name+",hello");
}
}
//反射代码
public class Reflect {
public static void main(String[] args) throws Exception {
Class<?> clz=Class.forName("aboutReflection.A");
Object o=clz.newInstance();
Method m=clz.getMethod("foo", String.class);
for(int i=0;i<16;i++){
m.invoke(o, Integer.toString(i));
}
}